我遇到以下情况,我正在比较两个相同但SQL Server不这么认为的值。一个是存储在DB中的值,另一个是从平面文件导入到DB的值。
SELECT
CASE
WHEN 'Capital Markets - Americas' = 'Capital Markets – Americas'
THEN 1
ELSE 0
END
返回0.
你们可以帮助我如何比较忽略编码吗?
答案 0 :(得分:1)
正如一些评论者所提到的那样,你可以标准化连字符(例如用超大号替换En dash
个字符(ASCII代码150)(ASCII代码45):
DECLARE @Value1 VARCHAR(50)
DECLARE @Value2 VARCHAR(50)
SET @Value1 = 'Capital Markets - Americas'
SET @Value2 = 'Capital Markets – Americas'
SELECT CASE WHEN @Value1 = @Value2
THEN 1
ELSE 0
END AS OriginalComparison,
CASE WHEN REPLACE(@Value1,CHAR(150),CHAR(45)) = REPLACE(@Value2,CHAR(150),CHAR(45))
THEN 1
ELSE 0
END AS NewComparison
您可能会发现两个数据源之间存在差异的其他字符,并且可以在字段周围进行额外的REPLACE
调用以替换这些字符(或编写一个函数来为您执行所有清理)。