无法将varchar值转换为int数据类型

时间:2019-01-17 10:57:10

标签: sql sql-server

我有简单的代码。我需要简单地操作:“ 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

2 个答案:

答案 0 :(得分:4)

您不能将varchar的十进制表示形式直接转换为intSELECT 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