我在 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)
请在日期文字周围使用字符串分隔符,并尽一切可能避免模糊的区域格式,例如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 DATE
,YYYY-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 的优秀文章: