2012-07-09 35 views
1

有人可以幫助解決這個問題。我遇到了這個sql查詢的問題。 我需要將price1_split轉換爲int。但它似乎也得到了它旁邊的連接。如何在SQL查詢中轉換/鑄造一列

SELECT product_number,product_name,description, 
price1+ ' ' + CONVERT(INT, price1_split) + '% |' + 
price2+ ' ' + CONVERT(INT, price2_split) + '% |' + 
price3+ ' ' + CONVERT(INT, price3_split) + '%' as price_split 
from tbl_products 

錯誤味精說:轉換VARCHAR值時 轉換失敗 '%|'到數據類型int。

+0

是什麼price_split的類型使用FLOOR()爲截斷的?如果它是VARCHAR,則不需要轉換,如果它是Numeric,則不會轉換爲INT,但VARCHAR – codingbiz 2012-07-09 12:33:29

+0

字符串''''+整數'price1_split'產生整數price1_split(空格爲'''忽略)。然而,當你嘗試'+'%|''SQL Server不知道該怎麼做,因爲你不能將一個字符串添加到一個整數,並且你會得到錯誤。 – 2012-07-09 12:46:10

+0

嗨tcoder&KM,我感謝您的幫助。謝謝很多:) – SyntaxError 2012-07-09 13:06:52

回答

3

由於您最終需要一個由% |分隔的字符串值,因此您不應將它們轉換爲整數。如果要將值添加到一起,則需要將它們轉換爲INT,但不添加它們,而是將它們連接到字符串上。假設它們已經是字符串(CHAR, VARCHAR)的值,只需將它們連接到其他字符元素上。

SELECT product_number,product_name,description, 
    price1+ ' ' + price1_split + '% |' + 
    price2+ ' ' + price2_split + '% |' + 
    price3+ ' ' + price3_split + '%' as price_split 
from tbl_products 

但是,如果他們是你試圖截斷爲整數浮點值,你可以把它們CONVERT()INT然後CONVERT()他們回到字符串來連接。在這種情況下,它可能會更好CONVERT(VARCHAR(n), FLOOR(price1_split))

-- Using CONVERT(INT) for truncation 
SELECT product_number,product_name,description, 
    price1+ ' ' + CONVERT(VARCHAR(32), CONVERT(INT, price1_split)) + '% |' + 
    price2+ ' ' + CONVERT(VARCHAR(32), CONVERT(INT, price2_split)) + '% |' + 
    price3+ ' ' + CONVERT(VARCHAR(32), CONVERT(INT, price3_split)) + '%' as price_split 
from tbl_products 
+0

非常感謝邁克爾,您的解決方案的作品!我可以稱你爲主人:) – SyntaxError 2012-07-09 13:06:15