以百分比表示的tsql格式
我有以下sql语句:以百分比表示的tsql格式,tsql,Tsql,我有以下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',但我有许多联合,只有一行必
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',但我有许多联合,只有一行必须使用百分比格式。是否有其他可用的替代方案
谢谢 你需要投下所有的工会条款 具有的最终输出中的每一行都具有
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确实允许这样做
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值进行并集
所以,解决方案是您需要将上面的select数据类型转换为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) + '%'
感谢Pranay,我实际上是在寻找一种替代方法,我有一个包含大量联合的大型查询,所以我不想只更改一个百分比行的所有联合。@campo-你在子查询上写,然后做我给你的另一种选择啊,好的,我只看到了你的原始答案,没有替代方法,不是您添加到的已编辑版本。谢谢,第二个解决方案非常适合我的需要!您能解释一下为什么要这样混合数据吗请+1谢谢您解释了最高优先级的数据类型,我不知道SQL server是如何确定列的数据类型的。