SQL Server支持多种格式-请参阅CAST和CONVERT上的MSDN联机丛书。这些格式中的大多数取决于您拥有的设置-因此,这些设置有时可能会起作用-有时不起作用。
解决此问题的方法是使用SQL Server支持的(略微修改)ISO-8601日期格式 -这种格式始终有效 -不管您使用的SQL Server语言和dateformat设置如何。
在ISO-8601格式由SQL Server支持有两种形式:
YYYYMMDD
只是日期(无时间部分);注意:没有破折号!,那非常重要!YYYY-MM-DD
是不是独立于你的SQL Server的日期格式设置,将不适用于所有情况!
要么:
YYYY-MM-DDTHH:MM:SS
日期和时间-请在此处注意:此格式带有破折号(但可以省略),并T
在的日期和时间部分之间固定为定界符DATETIME
。
这对SQL Server 2000及更高版本有效。
因此,在您的具体情况下-使用以下字符串:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
并且应该没问题(请注意:为此,您需要使用国际24小时制,而不是12小时AM / PM格式)。
或者:如果您使用的是SQL Server 2008或更高版本,则还可以使用DATETIME2
数据类型(而不是plain DATETIME
),并且当前数据类型INSERT
将正常工作而不会出现任何问题!:-) DATETIME2
更好,对转换的挑剔也少得多-无论如何,它还是SQL Server 2008或更高版本的推荐日期/时间数据类型。
SELECT
CAST('02-21-2012 6:10:00 PM' AS DATETIME2), -- works just fine
CAST('01-01-2012 12:00:00 AM' AS DATETIME2) -- works just fine
不要问我为什么整个主题如此棘手且有些令人困惑-这就是事实。但是使用该YYYYMMDD
格式时,对于SQL Server的任何版本以及SQL Server中的任何语言和日期格式设置,都应该可以使用。