如何比较SQL Server中不同编码的字符串

时间:2016-11-23 20:37:11

标签: sql-server

我遇到以下情况,我正在比较两个相同但SQL Server不这么认为的值。一个是存储在DB中的值,另一个是从平面文件导入到DB的值。

SELECT 
    CASE 
       WHEN 'Capital Markets - Americas' = 'Capital Markets – Americas' 
          THEN 1 
          ELSE 0 
    END 

返回0.

你们可以帮助我如何比较忽略编码吗?

1 个答案:

答案 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调用以替换这些字符(或编写一个函数来为您执行所有清理)。