SQL Server:比较两列

Tay*_*min 1 sql t-sql sql-server

我在SQL表中有两列如下.我需要比较这两列不匹配,但由于额外的小数,我得到错误的结果.当我尝试转换第一列时,它会给出错误

"将数据类型varchar转换为数字时出错."

如何解决这个问题?第一列的长度各不相同.

Column01(varchar)   Column02(Decimal)
0.01                0.010000  
0.255               0.255000
Run Code Online (Sandbox Code Playgroud)

Luk*_*zda 5

您有Column01无法投放的数据DECIMAL.

SQL Server 2012+我会用TRY_PARSE:

SELECT *
FROM your_table
WHERE Column02 = TRY_PARSE(Column01 AS DECIMAL(38,18));
Run Code Online (Sandbox Code Playgroud)

LiveDemo

如果无法安全地从列中获取值,您就可以获得NULL.

对于SQL Server 2008您可以使用:

SELECT *
FROM #tab
WHERE (CASE 
          WHEN ISNUMERIC(Column01) = 1 THEN CAST(Column01 AS DECIMAL(38,18))
          ELSE NULL
      END) = Column02;
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您需要在列级别使用:

SELECT Column01, Column02,
   CASE WHEN Column02 = TRY_PARSE(Column01 AS DECIMAL(38,18))
          OR (Column02 IS NULL AND Column01 IS NULL)
        THEN 'true'
        ELSE 'false'
    END AS [IsEqual]
FROM #tab;
Run Code Online (Sandbox Code Playgroud)

LiveDemo2