Clause SQL Between avec des colonnes de chaînes
Je veux faire une recherche à l'aide de "entre" clause sur une colonne de type chaîne. En faisant quelques test, j'ai obtenu ceci:
Supposons qu'il existe un pays de table avec une colonne "nom" de type varchar. Si j'exécute cette requête:
Select * from country where name between 'a' and 'b'
J'ai obtenu ce résultat:
Argentina
.
.
.
Argelia.
Il exclut les pays qui commence par B que j'ai trouvé un peu bizarre.
Est-il un moyen de faire cette recherche de façon plus précise? D'autres idées pour faire cette recherche?
Merci d'avance
source d'informationauteur Cheluis
Vous devez vous connecter pour publier un commentaire.
L'expression
est équivalent à
Donc 'Argentine' est >='A' <='B' et il satisfait la condition. Mais "Bolivie" n'est PAS <='B'. 'La bolivie" >'B'. Il ne se contente pas de regarder la première lettre: il regarde l'ensemble de la chaîne. Qui est certainement la façon dont il devrait être: si elle n'a pas fait cela, il n'y aurait aucun moyen de dire que vous voulez une plage inclus "Smith", mais pas " Smithers.
Pour accomplir ce que vous voulez, vous pourriez dire:
ou:
ou:
je pense que je sais comment résoudre votre problème. u pouvez essayer d'ajouter plus de caractère dans le dos, comme ce
cela renvoie un résultat de l'ABC de l'% à ACE
Une autre requête qui doit amener les pays qui commencent par b ainsi que d'Une, serait:
Le résultat est exact, mais vous avez peut-être un malentendu.
x between a and b
signifiex>=a and x<=b
. (Voir la PostGRES documentation pour plus de détails.)Si vous souhaitez obtenir des lignes qui commencent par un
a
ou unb
dire ce que tu veux dire:like
utilise le tableau des indices de sorte que vous obtiendrez le maximum de performance sur l'utilisation de ce.La raison de cette déclaration ne fonctionne pas est SQL plaquettes de la chaîne avec des espaces blancs jusqu'à ce qu'il est de la même longueur que la comparaison de chaîne de caractères. Donc, en comparaison, sql par rapport
b
suivie par plusieurs blancs avecb******
. Parce que l'espace blanc apparaît avant toutes les autres lettres, sql décidéb*****
est venu aprèsb[6 spaces]
. Donc il ne devrait pas être affiché.