我在两个不同的表中有两列SQL Server。一列有9.011
,其他表格列有9011
。我需要删除.
并比较这两列,看看它们是否相等。
有人可以帮我解决这个问题吗?
提前致谢。
答案 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)
:只需根据需要设置更合理的字符串长度。