Sql-Server-2008

“操作數類型沖突”與 DATE 列

  • June 25, 2020

我在 SQL Server Management Studio 中輸入以下命令

insert into testtable ([product_name], [price], [expire_date], [expire_time]) 
 values ('Teapot', 10.00, 23/12/2012, '12:35:00')

它產生此錯誤:

操作數類型沖突:int 與日期不兼容

這些是列:

 Column name   |   datatype
----------------+---------------
product_name    | varchar(30)
price           | money
expire_date     | date
expire_time     | time(7)

請在日期文字周圍使用字元串分隔符,並儘一切可能避免模棱兩可的區域格式,如DD/MM/YYYY. 怎麼樣:

insert into dbo.testtable ([product_name], [price], [expire_date], [expire_time]) 
 values ('Teapot', 10.00, '20121223', '12:35:00');

我之所以使用,YYYYMMDD是因為除了 with DATEYYYY-MM-DD可能會被誤解。例如DATETIME

SET LANGUAGE FRENCH;
DECLARE @d DATETIME = '2012-12-23';

結果:

消息 242,級別 16,狀態 3

將 varchar 數據類型轉換為 datetime 數據類型創建了一個越界值。

即使使用日期,您的原始格式也可能會導致問題:

SET DATEFORMAT MDY;
DECLARE @d DATE = '23/12/2012';

結果:

消息 241,級別 16,狀態 1

從字元串轉換日期和/或時間時轉換失敗。

不要聽起來說教,但請參閱此部落格文章:

還有這個影片:

還有 Tibor 的優秀文章:

引用自:https://dba.stackexchange.com/questions/23797