2013-08-05 5 views
3

Je dois rechercher une valeur comme 1234-abc. La base de données n'a pas cette valeur particulière, mais a une autre valeur 1234. Maintenant, le problème est quand j'écris ma requête commeProblème de sélection simple avec - (tiret) dans où clause

SELECT * FROM words WHERE tval='1234-abc' 

au lieu d'aller chercher un jeu vide d'enregistrements, il va chercher la valeur 1234, il semble ignorer quoi que ce soit après la -, une idée de ce qui se passe?

http://sqlfiddle.com/#!2/9de62/3

+0

Cela devrait fonctionner - voir http://sqlfiddle.com/#!2/34b05/1. 'Nombre d'enregistrements: 0'. Avez-vous quelque chose de spécial dans votre schéma? Des déclencheurs, une configuration inhabituelle? –

+0

Non ... sauf qu'il est à la fois une clé primaire et une partie d'un autre index groupé, il n'y a rien de bizarre – Bluemagica

+1

poster votre requête create table –

Répondre

2

Vous pouvez utiliser le mot-clé BINARY pour un mot-clé intégré dans le match exact

SELECT tval FROM words WHERE BINARY tval='1223-abc'; 

Binary que, après votre clause WHERE qui force une comparaison pour une exacte correspondance sensible à la casse

Fiddle

+1

Cela m'aide aussi. –

1

L'expression existante est implicitement convertir l'expression de chaîne à un numéro - vous devez convertir explicitement le nombre à un strng de caractère, comme ceci:

SELECT tval FROM words WHERE convert(tval,char(20))='1223-1ABCDE'; 

SQLFiddle here.