如何在SQL查询中转换/生成列

时间:2012-07-09 12:22:15

标签: sql sql-server tsql

有人可以帮忙解决这个问题。我有这个SQL查询的问题。 我需要将price1_split转换为int。但它似乎也得到了我旁边的连接。

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。

1 个答案:

答案 0 :(得分: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()将它们返回到字符串以进行连接。在这种情况下,最好使用FLOOR()进行截断,如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