2016-11-23 3 views
0

Ich bin in einer folgenden Situation, in der ich zwei Werte vergleichen, die identisch sind, aber der SQL Server denkt nicht. Einer ist ein Wert, der in DB gespeichert wird, und der andere ist ein Wert, der aus einer Flat-Datei in die DB importiert wird.Vergleichen von Zeichenfolgen mit verschiedenen Codierungen in SQL Server

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

0 zurück

Können sie helfen, wie kann ich ignoriert die Codierung vergleichen?

+3

Sieht man sich das an, ist der Bindestrich nicht der gleiche Zeichencode string es ist ascii 45, und in der anderen ist es ascii 150. –

+2

Bea t mir dazu :-) Einer wurde wohl per Auto-Korrekt in Word oder Excel erstellt. Ich denke nicht, dass Codierungen hier helfen werden. – SMM

+0

Das habe ich mir gedacht - glaube nicht, dass es einen Unterschied machen würde. –

Antwort

1

Wie mehrere Kommentatoren angespielt haben, könnten Sie Bindestriche standardisieren (zum Beispiel Ersetzen En dash Zeichen (ASCII-Code 150) mit Bindestrichen (ASCII-Code 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 

Sie andere Zeichen finden können, die zwischen Ihrem abweichen zwei Datenquellen und können einfach zusätzliche REPLACE Anrufe um die Felder wickeln, um diese auch zu ersetzen (oder schreiben Sie eine Funktion, um die gesamte Desinfektion für Sie zu tun).

Verwandte Themen