繁体   English   中英

SQL Server:比较两列

[英]SQL Server: Compare two columns

我在SQL表中有两列,如下所示。 我需要比较这两列是否不匹配,但是由于多余的小数,我得到了错误的结果。 当我尝试转换第一列时,它给出了错误

“将数据类型varchar转换为数字时出错。”

如何解决这个问题? 第一列的长度有所不同。

Column01(varchar)   Column02(Decimal)
0.01                0.010000  
0.255               0.255000

您在Column01有不能转换为DECIMAL

SQL Server 2012+我将使用TRY_PARSE

SELECT *
FROM your_table
WHERE Column02 = TRY_PARSE(Column01 AS DECIMAL(38,18));

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;

编辑:

如果需要在列级别使用,请使用:

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;

LiveDemo2

您可以使用自连接和转换功能来执行此操作

SELECT x.Column01, y.Column02
FROM table1 x, table1 y
WHERE x.Column02 = try_parse(y.Column01 as decimal(38,18))

既然我无法发表评论,我要感谢lad2025展示了实时演示并介绍了data.stackexchange来编写查询

另一种方法是:

create  table #temp(col1 varchar(10),col2 decimal(10,6))
insert into #temp values(0.01,0.010000 ),(0.255,0.255000),(0.25,25),(0.555,10.0)
select * from #temp where REPLACE(REPLACE(col2,col1,''),0,'')  = ''
select * from #temp where REPLACE(REPLACE(col2,col1,''),0,'')  <> ''

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM