Sql server sqlserver中的日期时间转换

Sql server sqlserver中的日期时间转换,sql-server,datetime,Sql Server,Datetime,但是 味精241,第16级,状态1,第5行 从字符串转换日期和/或时间时,转换失败 给出了错误。但是当char转换为datetime时,int@v2和char@v2具有相同的值。。它通常为false..因为某些字符无法转换为datetime..并且可能溢出..就像'2','a'等 您需要一个类似“2013-01-04”的字符值……它们可以正确转换 组合两个不同类型的运算符时,将进行隐式类型转换。转换的内容由规则控制 char和int的优先级都低于datetime,因此您的查询相当于: decla

但是

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


给出了错误。但是当char转换为datetime时,
int@v2
char@v2
具有相同的值。。它通常为false..因为某些字符无法转换为datetime..并且可能溢出..就像'2','a'等


您需要一个类似“2013-01-04”的字符值……它们可以正确转换

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

char
int
的优先级都低于datetime,因此您的查询相当于:

declare @v1 datetime = getdate();
declare @v2 char(1) = '2';
select @v1 + @v2;
--------------------------
将int值
2
强制转换为
datetime
效果很好,可以为您提供
1900-01-03 00:00:00.000


但是,将字符值
2
强制转换为日期时间不起作用,因为字符串
2
不能解释为有效的日期时间值。

int@v2
char@v2
没有相同的值。一个是int,另一个是charethorm10:我的问题是,为什么聊天不会转换,而另一方面int会转换。如果将val2 char(2)='2'更改为val2 char(10)='20130104',则不会出现错误。为什么随机将不同类型的值相加?你期待什么结果?如果您确实想将
2
添加到
datetime
值,您已经找到了一种方法。
declare @v1 datetime = getdate();
declare @v2 char(1) = '2';
select @v1 + @v2;
--------------------------
select @v1 + cast(@v2 as datetime);