将2PM转换为日期时遇到问题。
此代码失败:
SELECT CONVERT(datetime, '2018/10/23 14:00:00')
出现此错误:
第241级状态1线2消息
从字符串转换日期和/或时间时转换失败。
但是,此代码:
SELECT CONVERT(datetime, '2018/10/23 09:55:03')
工作正常。
为什么?
答案 0 :(得分:1)
DATETIME
倾向于选择哪种字符串格式可以转换为字符串。解决此问题的最佳方法是使用SQL Server支持的(略微修改)的 ISO-8601 日期格式-该格式始终有效 -与您的SQL Server无关语言和日期格式设置。
SQL Server支持ISO-8601 format有两种形式:
YYYYMMDD
仅适用于日期(无时间部分);请在此处注意:不要破折号!,这非常重要! YYYY-MM-DD
不独立于SQL Server中的日期格式设置,并且不在所有情况下均有效!或:
YYYY-MM-DDTHH:MM:SS
表示日期和时间-请在此处注意:此格式有破折号(但可以省略 )和固定的T
作为DATETIME
日期和时间部分之间的分隔符。这对SQL Server 2000及更高版本有效。
因此,请尝试以下语句:
SELECT CONVERT(DATETIME, '2018-10-23T14:00:00')
SELECT CONVERT(DATETIME, '2018-10-23T09:55:03')
它们都起作用吗?
或者,如果您使用的是SQL Server 2008或更高版本,请使用新的DATE
数据类型(仅DATE
-不 {{1 }}!);那么您实际上也可以使用DATETIME
格式,并且对SQL Server中的任何设置也可以使用。
不要问我,为什么整个主题如此棘手且有些令人困惑-这就是事实。但是使用YYYY-MM-DD
格式,则可以使用任何版本的SQL Server以及SQL Server中的任何语言和日期格式设置。
对于SQL Server 2008和更高版本,建议仅在需要日期部分时使用YYYYMMDD
,在同时需要日期和时间时使用DATE
。如果可能的话,您应该尝试逐步淘汰DATETIME2(n)
数据类型