【发布时间】:2014-04-30 06:51:22
【问题描述】:
根据MSDN documentation,datetime2 的范围从 0001-01-01 到 9999-12-31。它还说 ODBC 字符串文字如下所示:
{ ts 'yyyy-mm-dd hh:mm:ss[.fractional seconds]' }
为什么最后三个语句失败了?仅当值大于 1753-01-01 且未使用 ODBC 语法时,它们才会成功。
CREATE TABLE Book (Id INTEGER IDENTITY NOT NULL, ReleasedOn DATETIME2)
INSERT INTO Book VALUES ('0001-01-01 00:00:00')
INSERT INTO Book VALUES ('0501-01-01 00:00:00')
INSERT INTO Book VALUES ('1752-12-31 00:00:00')
INSERT INTO Book VALUES ('1753-01-01 00:00:00')
INSERT INTO Book VALUES ('1902-09-17 00:00:00')
SELECT * FROM Book WHERE ReleasedOn = {ts '1753-01-01 00:00:00'} -- OK
SELECT * FROM Book WHERE ReleasedOn = {ts '1902-09-17 00:00:00'} -- OK
SELECT * FROM Book WHERE ReleasedOn = '0001-01-01 00:00:00' -- OK
SELECT * FROM Book WHERE ReleasedOn =' 0501-01-01 00:00:00' -- OK
SELECT * FROM Book WHERE ReleasedOn = '1752-12-31 00:00:00' -- OK
SELECT * FROM Book WHERE ReleasedOn = {ts '0001-01-01 00:00:00'} -- Error
SELECT * FROM Book WHERE ReleasedOn = {ts '0501-01-01 00:00:00'} -- Error
SELECT * FROM Book WHERE ReleasedOn = {ts '1752-12-31 00:00:00'} -- Error
-- Error:
-- Server: Msg 241, Level 16, State 1, Line 1
-- Conversion failed when converting date and/or time
-- from character string.
【问题讨论】:
-
您很可能需要更新 ODBC 驱动程序
-
我使用 SQL Server Native Client 11.0 版本 2011.110.3000.00。那么有一个更新的版本可以处理更小的日期时间吗?
-
当我在小提琴中检查这个时,我发现提供的值似乎导致了一些问题(忽略第 4 次选择的错字)。见sqlfiddle.com/#!3/a1e1c/7
-
@Turophile 固定的小提琴语句仍然抛出相同的错误rextester.com/UNEJ79471
标签: sql sql-server odbc datetime2