[英]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));
如果無法安全地強制轉換列中的值,則會得到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;
您可以使用自連接和轉換功能來執行此操作
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.