2017-09-21 10 views
0

Je suis en train de rencontrer quelques problèmes sur SQL Server lors de la comparaison de colonnes contenant des caractères en exposant à côté de caractères standard. Tant que je compare les colonnes dans VARCHAR, cela fonctionne comme prévu. En NVARCHAR nombres normaux et les numéros sont traités comme superscript égaux comme le montre l'exemple de code suivant:Comparaison de symboles contenant des nombres normaux et des nombres en exposant dans SQL Server

CREATE TABLE #uom 
(
    SYMBOL_N1 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS 
, SYMBOL_N2 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS 
, SYMBOL_V1 VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS 
, SYMBOL_V2 VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS 
) 

INSERT INTO #uom VALUES ('in²','in2','in²','in2') 

SELECT 
    CASE WHEN SYMBOL_N1 = SYMBOL_N2 THEN 1 ELSE 0 END AS N 
, CASE WHEN SYMBOL_V1 = SYMBOL_V2 THEN 1 ELSE 0 END AS V 
FROM #uom; 

--RESULTS 
--N = 1 
--V = 0 

Comme nous utilisons également des caractères internationaux dans certains cas, UNICODE doit être utilisé ici.

Tout le monde a une idée, comment faire de SQL Server pour traiter les deux valeurs comme différentes?

Best, Stefan

Répondre

0

utilisation binaire collationner

SELECT *, 
    CASE WHEN SYMBOL_N1 COLLATE LATIN1_GENERAL_BIN = SYMBOL_N2 COLLATE LATIN1_GENERAL_BIN THEN 1 ELSE 0 END AS N 
, CASE WHEN SYMBOL_V1 = SYMBOL_V2 THEN 1 ELSE 0 END AS V 
FROM #uom; 
+0

cool. ça marche ... Merci beaucoup! –

+0

faites attention que cette méthode fait une correspondance binaire entre les chaînes de sorte que vous pourriez avoir des problèmes avec les accents ou sensibles à la casse – MtwStark