declare @v1 datetime = getdate();
declare @v2 int = 2;
select @v1 + @v2;
---------------------------
2013-01-06 08:16:20.620
,
declare @v1 datetime = getdate();
declare @v2 char(1) = '2';
select @v1 + @v2;
--------------------------
Msg 241, 16层,1州,5线
从字符串转换日期和/或时间时,转换失败。
给了错误。但是int @v2
和char @v2
都有相同的值?
当组合两个不同类型的操作符时,将进行隐式类型转换。转换的内容由数据类型优先级规则控制。
char
和int
的优先级都低于datetime,因此您的查询相当于:
select @v1 + cast(@v2 as datetime);
将int值2
转换为datetime
工作得很好,并给出1900-01-03 00:00:00.000
将字符值2
转换为日期时间不能工作,因为字符串2
不能被解释为有效的日期时间值。
当char转换为datetime时。通常为false..因为有些字符不能转换为日期时间..并且可能溢出..就像'2','a'等..
需要一个char值,比如'2013-01-04'…它们可以被正确转换…