2012-07-09 50 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