2011-03-21 136 views
2

我有以下SQL语句:TSQL格式为百分比

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

你能解释一下你为什么要这样,请 – gbn 2011-03-21 05:36:29

回答

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) + '%' 
+0

感谢Pranay,我实际上是在做了这样的替代之后,我有一大堆工会的查询,所以我不想将所有工会只改变一个百分比行。 – campo 2011-03-21 05:33:42

+0

@campo - 你在子查询上写下来,做我给你的另一种选择 – 2011-03-21 05:35:21

+0

好吧,我只看到你的原始答案,没有其他选择,而不是你添加的编辑版本。谢谢 – campo 2011-03-21 05:44:00

2

需要以CAST所有联合条款。

最终输出中的每一行都有highest precedence datatypeintvarchar高,所以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) + '%' 

或者为int:你不能有不同的数据类型/格式的一列。

当然,这是一个例子,但混合整数和浮点数格式是没有意义的,即使SQL并允许它

+0

+1感谢解释最高优先级数据类型的数据混合,我不知道SQL服务器是如何确定的数据类型的列。 – campo 2011-03-21 05:50:17