如何比较SQL Server中的两列

时间:2014-03-15 06:02:29

标签: sql sql-server sql-server-2008 tsql

我在两个不同的表中有两列SQL Server。一列有9.011,其他表格列有9011。我需要删除.并比较这两列,看看它们是否相等。

有人可以帮我解决这个问题吗?

提前致谢。

3 个答案:

答案 0 :(得分: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 :(得分:2)

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

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

答案 2 :(得分: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):只需根据需要设置更合理的字符串长度。