我有以下sql语句:
SELECT 1, 2, 3
UNION ALL
SELECT CAST(1 AS VARCHAR) + '%',CAST(2 AS VARCHAR) + '%',CAST(3 AS VARCHAR) + '%'
我收到以下错误:
Conversion failed when converting the varchar value '1%' to data type int.
我可以将第一个select语句更改为'1','2','3',但我有很多联合,只有一行必须具有百分比格式。还有其他可用的替代方案吗?
谢谢!
答案 0 :(得分:2)
您需要来CAST所有联合条款。
最终输出中的每一行都有highest precedence datatype。 int
高于varchar
,因此将1%
转换为int,结果明显
select cast(1 as varchar), cast(2 as varchar), cast(3 as varchar)
union all
select cast(1 as varchar) + '%',cast(2 as varchar) + '%',cast(3 as varchar) + '%'
或者:您不能在一列中使用不同的数据类型/格式。
当然这是一个例子,但即使SQL确实允许它,混合整数和格式化的浮点数也没有意义
答案 1 :(得分:1)
试试这个
select cast(1 as varchar) ,cast(2 as varchar), cast(3 as varchar)
union all
select cast(1 as varchar) + '%',cast(2 as varchar) + '%',cast(3 as varchar) + '%'
错误原因是你选择了1,2,3这是一个整数值并且你正在与varchar值结合
因此,您需要将选择数据类型转换为varchar
第二个解决方案是
Select cast(col1 as varchar),cast(col2 as varchar),........... from
(
.. all your union large query you have writting
) d
union all
select cast(1 as varchar) + '%',cast(2 as varchar) + '%',cast(3 as varchar) + '%'