这个sql语句:
SELECT DAY('2007-04-30T01:01:01.1234567 -07:00');
从SQL Server 2012文档中复制并在我的SQL Server 2012 Express版本环境中进行测试。但是有一个错误说
从字符串转换日期和/或时间时转换失败。
我理解DAY()
中传递的字符类型参数无法转换为日期时间类型值,这意味着它的格式错误(与SET DATEFORMAT
或某些设置相关的某些当前设置不兼容我不知道)。这就是我想知道的。你能解释一下为什么那个样本语句(不属于我的)在我的环境中不起作用。我的SQL Server实例是使用默认设置安装的,安装后我没有更改任何内容。
通过稍微修改输入字符串,它可以工作:
SELECT DAY('2007-04-30T01:01:01.123'); -- Works!
但这些没有(说我最初发布的错误):
SELECT DAY('2007-04-30T01:01:01.1234'); -- just add 4
SELECT DAY('2007-04-30T01:01:01.123 -07:00'); -- just add -07:00
看起来有一些与此问题相关的设置,请告诉我它可能是什么以及如何解决此问题(我不想更改输入字符串,因为我试图让它工作)。
感谢您抽出时间解决我的问题!
更新:
也做了一些建议,如:
SELECT DAY('2007-04-30T01:01:01.1234567-07:00');
SELECT DAY('2007-04-30T01:01:01.123-07:00');
但它仍然无效。
答案 0 :(得分:0)
好吧,我发现了问题。事实上,声明本身(正如某些建议的那样)应该有效,但这只是问题的一个方面。另一方面是当前数据库的 兼容级别 。就我而言,它只是90
(这是SQL Server 2005),因此需要显式转换。通过将兼容级别更改为110
(SQL Server 2012)或显式强制转换,它可以正常工作。