我有简单的代码。我需要简单地操作:“ column_A * 100”,但是我无法将varchar类型转换为int。 我的错误是:将varchar值'0.27'转换为数据类型int时,转换失败。
SELECT POWIERZCHNIA,
POWIERZCHNIA * 100
FROM v_analiza_cechy_produktow
--Conversion failed when converting the varchar value '0,27' to data type int.
SELECT POWIERZCHNIA,
CAST (REPLACE(POWIERZCHNIA, ',' , '.') AS int)
FROM v_analiza_cechy_produktow
--Conversion failed when converting the varchar value '0.27' to data type int.
我想将此值转换为int,但是如何?
@Larnu
SELECT POWIERZCHNIA FROM v_analiza_cechy_produktow
WHERE TRY_CONVERT(decimal(10,4),POWIERZCHNIA) IS NULL;
前20行:
NULL 1,08 0.21 0,85 1,38 0,00 2,88 3,00 2,40 1,00 1,36 0,30 2,16 3,24 空值 空值 空值 2,88
答案 0 :(得分:4)
您不能将varchar
的十进制表示形式直接转换为int
(SELECT CONVERT(int, '0.27');
会因相同的错误而失败)。您需要先使用CONVERT
来对decimal
进行评估,然后再对int
进行评估。因此,对于您的查询:
SELECT POWIERZCHNIA,
CONVERT(int,CONVERT(decimal(3,2),REPLACE(POWIERZCHNIA, ',', '.')))
FROM v_analiza_cechy_produktow;
请注意,由于我们只有一个样本值decimal(3,2)
,因此我使用了'0.27'
。您可能需要选择其他比例和精度。
但是,这确实是一个问题。为什么将十进制值存储为varchar
?
答案 1 :(得分:0)
不明白为什么要替换为。然后仍转换为INT ...,则没有任何意义。 下面应该可以正常工作,请对其进行测试。
SELECT CAST(CAST('0.27' AS DECIMAL(5,2)) * 100 as int)
SELECT
POWIERZCHNIA,
CAST((CAST(POWIERZCHNIA AS DECIMAL(5,2)) * 100) as INT)
FROM v_analiza_cechy_produktow
WHERE POWIERZCHNIA IS NOT NULL
编辑
与@Larnu基本上是相同的答案,只是使用CAST而不是CONVERT ...
编辑
您可以使用ISNUMERIC函数检查POWIERZCHNIA
SELECT
POWIERZCHNIA,
CAST((CAST(POWIERZCHNIA AS DECIMAL(5,2)) * 100) as INT)
FROM v_analiza_cechy_produktow
WHERE IsNumeric(POWIERZCHNIA) = 1