1
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;
--------------------------

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

给出错误。但两者int @v2char @v2具有相同的价值?

4

2 回答 2

3

当组合两个不同类型的运算符时,您将进行隐式类型转换。转换的内容由数据类型优先级规则控制。

两者charint的优先级都低于日期时间,因此您的查询相当于:

select @v1 + cast(@v2 as datetime);

将 int 值2转换为一个datetime作品就好了,给你1900-01-03 00:00:00.000

但是,将 char 值2转换为 datetime 不起作用,因为该字符串2不能解释为有效的 datetime 值。

于 2013-01-04T06:32:18.017 回答
0

当 char 被转换为 datetime.. 它通常是 false..因为有些字符不能被转换为 datetime..并且可能溢出..就像'2','a'等。

你需要一个像'2013-01-04'这样的char值......它们可以正确转换......

于 2013-01-04T05:00:02.343 回答