如何在SQL服务器中比较两列

3

我在SQL Server中有两个不同表格中的两列。其中一列是9.011,另一个表格的列是9011。我需要去掉.并比较这两列是否相等。

请问有人能帮我解决这个问题吗?

提前感谢。


你有没有查看过https://dev59.com/qXI-5IYBdhLWcg3w3crS? - Saravanan
SQL Server还是MySQL?语法可能会有所不同。 - Joachim Isaksson
3个回答

4

试试这个:

SELECT CASE WHEN REPLACE (Table1.ColName1,'.','') = Table2.ColName2 
            THEN 'Equal' 
            ELSE 'Not Equal' 
            END AS IsEqual
    FROM Table1
    INNER JOIN Table2 ON Table1.PrimaryKey = Table2.ForeignKey

如果它们相等,这个查询将返回Equal,如果它们不相等,将返回Not Equal

REPLACE()将从ColName1中删除.


1
在这种情况下,我仍然更喜欢明确表达,但隐式转换的使用非常好。 - J0e3gan

2

我假设你的列是十进制类型,所以我首先将它们转换为varchar类型。

where 
replace(Convert(varchar(50), column1 ),'.','') = Convert(varchar(50), column2)

floatintdecimal(4,3)decimal(4,0)numeric(4,3)numeric(4,0)(鉴于所涉及的数字),只要它们的比例和精度捕捉字符串中要比较的数字,使用这种方法都应该可以。 - J0e3gan

2

将数字转换为字符串,清除小数点,并进行比较。对于具有刻度和精度的数字类型,应该能够捕获所有要比较的数字位。

例如,在T-SQL中,以下PoC可以实现...

DECLARE @foo float = 9.011;
DECLARE @bar int = 9011;
--Yup!
--DECLARE @foo decimal(4,3) = 9.011;
--DECLARE @bar decimal(4) = 9011;
----Yup!
--DECLARE @foo numeric(4,3) = 9.011;
--DECLARE @bar numeric(4) = 9011;
----Yup!
--...etcetera.

DECLARE @fooString varchar(max) = CAST(@foo AS varchar(max));
DECLARE @barString varchar(max) = CAST(@bar AS varchar(max));

PRINT '@fooString = ' + @fooString;
PRINT '@barString = ' + @barString;

IF (REPLACE(@fooString, '.', '') = @barString
    PRINT 'Yup!';
ELSE
    PRINT 'Nope....';

运行该程序将产生以下输出:

@fooString = 9.011
@barString = 9011
Yup!

不,当然不需要使用 varchar(max):只需根据您的需求设置更合理的字符串长度即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接