[英]How to get SQL Server DateTime2 field in ODBC native client
[英]SQL Server datetime2 and ODBC
根據MSDN文檔, 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.
根據MSDN :
SQL Server always treats ODBC data as being of the datetime data type.
*Conversion Notes*
1.ODBC string literals are mapped to the datetime data type. Any assignment
operation from ODBC DATETIME literals into date, time, datetime2, or datetimeoffset
types will cause an implicit conversion between datetime and these types as
defined by the conversion rules.
和Datetime
數據類型的日期范圍是:
January 1, 1753, through December 31, 9999
這就是為什么SQL服務器在最后3個語句中使用ODBC字符串文字時拋出錯誤的原因,因為它對數據類型Datetime
而不是Datetime2
了隱式轉換,並且提供的值超出了Datetime數據類型可能的范圍值,因此出現了錯誤。
我希望這有幫助!!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.