gpt4 book ai didi

SQL Server 日期时间转换问题

转载 作者:行者123 更新时间:2023-12-02 10:00:08 27 4
gpt4 key购买 nike

我总是使用此代码进行日期时间转换:

 DECLARE @a datetime
SET @a= CONVERT(datetime,'2012-12-28 14:04:43')
print @a

但这不再起作用了!我什至尝试重新启动 SQL Server,但问题仍然存在:

Conversion error

图像中的错误是意大利语。英文应该是:

The conversion of a char data type to datetime resulted in a datetime value that is out of range of allowed values​​.

最佳答案

SQL Server 支持多种格式 - 请参阅 MSDN Books Online on CAST and CONVERT 。大多数这些格式取决于您所拥有的设置 - 因此,这些设置有时可能有效 - 有时则无效。

解决此问题的方法是使用 SQL Server 支持的(稍作修改的)ISO-8601 日期格式 - 此格式始终有效 - 无论您的情况如何SQL Server 语言和日期格式设置。

ISO-8601 format SQL Server 支持两种类型:

  • YYYYMMDD仅适用于日期(无时间部分);请注意:不要破折号!,这非常重要! YYYY-MM-DD 独立于 SQL Server 中的日期格式设置,并且在所有情况下都有效!

或者:

  • 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 中的任何语言和日期格式设置。

所以在你的具体情况下 - 使用这个:

DECLARE @a datetime
SET @a= CONVERT(datetime, '2012-12-28T14:04:43')
print @a

这应该适用于任何 SQL Server 安装,具有任何语言和日期格式设置。

如果您运行美国英语的原始代码 - 它将正常工作:

SET LANGUAGE English

DECLARE @a datetime
SET @a= CONVERT(datetime, '2012-12-28 14:04:43')
print @a

Dec 28 2012 2:04PM

但如果您使用意大利语(或德语、英国或法语)作为语言,则会失败因为格式没有 T日期/时间字符串中间的与语言无关并且不“安全”:

SET LANGUAGE Italian

DECLARE @a datetime
SET @a= CONVERT(datetime, '2012-12-28 14:04:43')
print @a

Msg 242, Level 16, State 3, Line 4
La conversione di un tipo di dati varchar in datetime ha generato un valore non compreso nell'intervallo dei valori consentiti.

关于SQL Server 日期时间转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14073026/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com