我在SQL Server中有两个不同表格中的两列。其中一列是9.011
,另一个表格的列是9011
。我需要去掉.
并比较这两列是否相等。
请问有人能帮我解决这个问题吗?
提前感谢。
我在SQL Server中有两个不同表格中的两列。其中一列是9.011
,另一个表格的列是9011
。我需要去掉.
并比较这两列是否相等。
请问有人能帮我解决这个问题吗?
提前感谢。
试试这个:
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
中删除.
。
我假设你的列是十进制类型,所以我首先将它们转换为varchar类型。
where
replace(Convert(varchar(50), column1 ),'.','') = Convert(varchar(50), column2)
float
和int
,decimal(4,3)
和decimal(4,0)
,numeric(4,3)
和numeric(4,0)
(鉴于所涉及的数字),只要它们的比例和精度捕捉字符串中要比较的数字,使用这种方法都应该可以。 - J0e3gan将数字转换为字符串,清除小数点,并进行比较。对于具有刻度和精度的数字类型,应该能够捕获所有要比较的数字位。
例如,在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)
:只需根据您的需求设置更合理的字符串长度即可。