2011-07-08 3 views
2

J'ai une question que je pense devrait ressembler à ceci:clause WHERE requis comme lorsque Equals devrait fonctionner

select * 
from Requesters 
where CITIZEN_STATUS = 'OS-IE '; 

Le CITIZEN_STATUS sur le terrain, dont le type de données est varchar (15), a un espace de fin pour ce particulier valeur. Je l'ai collé dans Notepad ++ et je l'ai regardé avec un éditeur hexadécimal, et l'espace final est en effet 0x20.

Pour la requête au travail, je dois l'écrire comme ceci:

select * 
from Requesters 
where CITIZEN_STATUS like 'OS-IE%'; 

Alors, évidemment, j'ai une solution de contournement et la question n'est pas urgente. Mais j'aimerais vraiment savoir pourquoi la première requête échoue à faire ce que j'attends. Quelqu'un a-t-il une idée?

Je devrais mentionner que j'utilise SQL Server 2005 et peut fournir plus d'informations sur la configuration si nécessaire.

+0

Voulez-vous savoir comment préserver l'espace de fin de comparaison? Ou comment le supprimer? Ce n'est pas clair. Et quel type de données est CITIZEN_STATUS? – gbn

+0

C'est plus une question théorique. Je veux savoir pourquoi je ne peux pas utiliser le signe égal et mettre exactement ce qui est dans le champ, plutôt que d'avoir à utiliser LIKE avec un caractère générique. Merci! – user434462

Répondre

0

En MySQL 5, cette requête fonctionne. Cependant, il ne distingue pas les espaces de fin. La requête correspond à 'OS-IE' ainsi qu'à 'OS-IE'. Dans SQL Server 2005, vous pouvez utiliser une expression régulière qui définit la fin d'une ligne. Le caractère correct pour ceci est le signe dollar '$' pour indiquer que vous voulez l'espace. Voir http://msdn.microsoft.com/en-us/magazine/cc163473.aspx