簡體   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