2011-03-21 190 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