我的想法是在应用程序启动时使用SELECT GETDATE(),然后使用VB.Net& amp;标识其日期时间格式.每当我尝试插入日期时间值时,我会将其转换为应用程序启动时标识的日期时间格式.
是否有更好的方法在应用程序和应用程序之间建立一致的日期时间格式? sql Server避免了冲突.例如:将一天与一个月混合.
解决方法
各种设置(语言,日期格式)仅影响在sql Server Management Studio中向您显示DateTime的方式 – 或者在您尝试将字符串转换为DateTime时如何解析它.
sql Server支持许多格式 – 请参阅MSDN Books Online on CAST and CONVERT.这些格式大多取决于您拥有的设置 – 因此,这些设置可能会有效 – 有时不会.
因此,如果可能的话,不要一直在DateTime和字符串之间转换日期!将其保留为.NET中的DateTime,在sql Server中使用DATE或DATETIME2(n),并使日期采用其本机格式.使用支持本机DateTime数据类型的参数化查询,这样您就不需要将日期转换为字符串并返回!
如果由于某种原因必须使用字符串来表示日期,唯一可靠的解决方法是使用sql Server支持的(略微调整的)ISO-8601日期格式 – 这种格式始终有效 – 无论您的sql Server语言如何和dateformat设置.
sql Server支持ISO-8601 format有两种形式:
> YYYYMMDD仅适用于日期(无时间部分);请注意:没有破折号!这非常重要! YYYY-MM-DD不依赖于sql Server中的dateformat设置,并且不适用于所有情况!
要么:
> YYYY-MM-DDTHH:MM:SS表示日期和时间 – 请注意:此格式有短划线(但可以省略),并且固定T作为DATETIME的日期和时间部分之间的分隔符.
这适用于sql Server 2000及更高版本.
如果您使用sql Server 2008或更高版本以及DATE数据类型(仅DATE – 而不是DATETIME!),那么您确实也可以使用YYYY-MM-DD格式,这也适用于sql Server中的任何设置.
不要问我为什么整个主题如此棘手而且有些混乱 – 这就是它的方式.但是使用YYYYMMDD格式,您可以适用于任何版本的sql Server以及sql Server中的任何语言和日期格式设置.
对于sql Server 2008及更高版本的建议是,如果您只需要日期部分,则使用DATE;如果需要日期和时间,则使用DATETIME2(n).您应尝试尽可能开始逐步淘汰DATETIME数据类型