SQL Server中的日期时间转换

时间:2013-01-04 04:53:03

标签: sql-server datetime

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,Level 16,State 1,Line 5
  从字符串转换日期和/或时间时转换失败。

给出错误。但int @v2char @v2都有相同的值?

2 个答案:

答案 0 :(得分:3)

当组合两个不同类型的运算符时,您将进行隐式类型转换。转换的内容由Data Type Precedence规则控制。

charint的优先级低于日期时间,因此您的查询等效于:

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

将int值2投射到datetime的工作正常,并为您提供1900-01-03 00:00:00.000

将char值2转换为日期时间不起作用,因为字符串2无法解释为有效的日期时间值。

答案 1 :(得分:0)

当char被转换为datetime时...它通常是假的...因为有些字符无法转换为datetime ..而且可能溢出..就像'2','a'等...

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