“操作数类型冲突”与 DATE 列

Jac*_*ack 3 sql-server-2008

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

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

它产生这个错误:

操作数类型冲突:int 与日期不兼容

这些是列:

  Column name   |   datatype
----------------+---------------
product_name    | varchar(30)
price           | money
expire_date     | date
expire_time     | time(7)
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 5

请在日期文字周围使用字符串分隔符,并尽一切可能避免模糊的区域格式,例如DD/MM/YYYY. 怎么样:

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

我使用YYYYMMDD是因为,除了 with DATEYYYY-MM-DD可能会被误解。随着DATETIME,例如:

SET LANGUAGE FRENCH;
DECLARE @d DATETIME = '2012-12-23';
Run Code Online (Sandbox Code Playgroud)

结果:

Msg 242, Level 16, State 3
La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites。

即使使用日期,您的原始格式也可能会导致问题:

SET DATEFORMAT MDY;
DECLARE @d DATE = '23/12/2012';
Run Code Online (Sandbox Code Playgroud)

结果:

消息 241,级别 16,状态 1
从字符串转换日期和/或时间时转换失败。

不是说教,但请参阅此博客文章:

还有这个视频:

和 Tibor 的优秀文章: