SQL Server将字符串转换为日期

时间:2018-10-23 15:06:36

标签: sql sql-server datetime

将2PM转换为日期时遇到问题。

此代码失败:

SELECT CONVERT(datetime, '2018/10/23 14:00:00')

出现此错误:

  

第241级状态1线2消息
  从字符串转换日期和/或时间时转换失败。

但是,此代码:

SELECT CONVERT(datetime, '2018/10/23 09:55:03')

工作正常。

为什么?

1 个答案:

答案 0 :(得分:1)

SQL Server中的

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)数据类型