2

Je cherche une fonction de comparaison de varchar SQL comme C# string.compare (nous pouvons ignorer le cas pour l'instant, devrait retourner zéro quand l'expression de caractère est identique et une expression non nulle quand elles sont différentes)comparaison de varchar dans SQL Server

Fondamentalement, j'ai une colonne alphanumérique dans une table qui doit être vérifiée dans une autre table.

Je ne peux pas sélectionner A.col1 - B.col1 de (requête) comme opérateur « - » ne peut pas être appliqué sur le caractère des expressions

Je ne peux pas jeter mon expression comme int (et faire une différence/soustraction) car elle ne

select cast ('ASXT000R' as int) 
Conversion failed when converting varchar 'ASXT000R' to int 

Soundex ne le faire que soundex est le même pour 2 cordes similaires

Difference ne le faire que select difference('abc','ABC') = 4 (as per msdn, la différence est la différence i n le soundex des expressions de 2 caractères et différence = 4 implique moins différent)

Je peux écrire un curson pour faire une comparaison ASCII pour chaque caractère alphanumérique dans chaque rangée, mais je me demandais s'il y avait une autre façon de le faire?

Répondre

3

nous pouvons ignorer le cas pour l'instant, devrait revenir à zéro lorsque l'expression de caractères sont identiques et une valeur non nulle expression quand ils sont différents

Si c'est tout ce que vous voulez, vous pouvez simplement utiliser ceci:

CASE WHEN 'a' = 'b' THEN 0 ELSE 1 END 

Notez que cette expression renvoie 1 lorsque l'un des arguments est NULL. Ce n'est probablement pas ce que vous voulez. Vous pouvez utiliser ce qui suit pour revenir NULL si l'argument est NULL:

CASE WHEN 'a' = 'b' THEN 0 
    WHEN 'a' <> 'b' THEN 1 
END 

Si vous voulez des valeurs négatives et positives en fonction qui compare « plus », vous pouvez utiliser ceci:

CASE WHEN 'a' < 'b' THEN -1 
    WHEN 'a' = 'b' THEN 0 
    WHEN 'a' > 'b' THEN 1 
END 
+0

Yup, facile, ne m'a jamais frappé. – ram

+0

Que diriez-vous de la comparaison de varchar? –

1
select case when a.col1 = b.col1 then 0 else 1 end from a join b on a.id = b.id 

ou

select case when lower(a.col1) = lower(b.col1) then 0 else 1 end from a join b on a.id = b.id 
Questions connexes