Sql 转换varchar值时转换失败';:';到数据类型int
我不明白我做错了什么Sql 转换varchar值时转换失败';:';到数据类型int,sql,sql-server-2008,Sql,Sql Server 2008,我不明白我做错了什么 测试: Id | Roll | ------------------------- 1 | 145 | select Id + ':' + roll from test 这已经在评论中得到了回答,但为了完成,您可以执行以下操作 select cast(Id as varchar(1)) + ':' + cast(roll as varchar(10)) from test 这已经在评论中得到了回答,但为了完成,您可以执行以下操
测试
:
Id | Roll |
-------------------------
1 | 145 |
select Id + ':' + roll from test
这已经在评论中得到了回答,但为了完成,您可以执行以下操作
select cast(Id as varchar(1)) + ':' + cast(roll as varchar(10)) from test
这已经在评论中得到了回答,但为了完成,您可以执行以下操作
select cast(Id as varchar(1)) + ':' + cast(roll as varchar(10)) from test
为了完整起见: 使用SQL Server 2012及更高版本的用户可以使用来实现相同的功能,而无需进行任何显式转换
SELECT CONCAT(15, ':', 10);
还将导致:
15:10
作为一个额外的好处,CONCAT将以本机方式处理任何空值,而不是完全终止您的结果
SELECT CONCAT('Oh snap, there might be a NULL value', NULL, ' somewhere in here!', 11, '!!');
结果:
Oh snap, there might be a NULL value somewhere in here!11!!
为了完整起见: 使用SQL Server 2012及更高版本的用户可以使用来实现相同的功能,而无需进行任何显式转换
SELECT CONCAT(15, ':', 10);
还将导致:
15:10
作为一个额外的好处,CONCAT将以本机方式处理任何空值,而不是完全终止您的结果
SELECT CONCAT('Oh snap, there might be a NULL value', NULL, ' somewhere in here!', 11, '!!');
结果:
Oh snap, there might be a NULL value somewhere in here!11!!
在SQL Server中,
+
表示“为所有int字段添加”,它将尝试将任何文本转换为值(在您的示例中为“:”)。这意味着,如果您的Id
或Roll
为int,则需要将其转换为text,首先将整数值转换为char,然后再进行连接。在SQL Server中,+
表示“为所有int字段添加”,它将尝试将任何文本转换为值(在您的示例中为“:”)。这意味着如果您的Id
或Roll
为int,则需要将其转换为text,首先将整数值转换为char,然后再进行连接。