SELECT DAY(' 2007-04-30T01:01:01.1234567 -07:00')不起作用?

时间:2015-02-27 16:52:21

标签: sql-server sql-server-2012

这个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');

但它仍然无效。

1 个答案:

答案 0 :(得分:0)

好吧,我发现了问题。事实上,声明本身(正如某些建议的那样)应该有效,但这只是问题的一个方面。另一方面是当前数据库的 兼容级别 。就我而言,它只是90(这是SQL Server 2005),因此需要显式转换。通过将兼容级别更改为110(SQL Server 2012)或显式强制转换,它可以正常工作。