La substance LIKE% VAL% sera trop large, par ex. la base de données contient 00000et vous cherchez 1234 vous allez tirer cette ligne, ce qui est ce que l'OP n'a pas l'intention (si je comprends bien la partie "EXACT" correctement).
Ce que vous voulez est une expression régulière qui fait quelque chose comme: un nombre quelconque de zéros suivi par la correspondance et la fin de la ligne.
De cette question, nous savons comment découper des zéros non significatifs: Better techniques for trimming leading zeros in SQL Server?
SUBSTRING(str_col, PATINDEX('%[^0]%', str_col+'.'), LEN(str_col))
Ainsi, moissonneuse-batteuse avec votre requête, et vous pouvez faire quelque chose comme ce qui suit:
WHERE SUBSTRING(external_prv_id, PATINDEX('%[^0]%', external_prv_id+'.'), LEN(external_prv_id)) = '12345'
Bien sûr , la meilleure (meilleure?) solution serait de les stocker comme INTEGERS afin que vous obteniez l'indexabilité complète et ne devez pas déblayer avec toute cette merde.Si vous avez vraiment besoin de stocker la chaîne exacte, alors vous avez deux options:
- stocker les résultats entier normalisé dans une autre colonne et l'utiliser pour toutes les requêtes internes
- toujours stocker un entier mais pad avec des zéros à la demande (mon vote)
Voulez-vous dire "2035" (pas "2034") dans "0000020354"? Vous voudrez peut-être modifier la question. – MattH