Si j'ai une colonne avec des valeurs commençant par "%" comme ceci:

[ID]-----[VALUES]
1--------Amount
2--------Percentage
3--------%Amount
4--------%Percentage

Comment puis-je avoir uniquement ces deux lignes avec une requête "sélection"?:

[ID]-----[VALUES]
3--------%Amount
4--------%Percentage

J'ai essayé ces requêtes mais elles ne fonctionnent pas:

select * from TABLE where VALUES like '[%]%'
select * from TABLE where VALUES like '\%%'

Je sais qu'en Java, C et d'autres langages, le backspace \ vous permet d'utiliser un caractère jolly comme un caractère normal comme:

var s = "I called him and he sad: \"Hi, there!\"";

Il existe un caractère / une fonction similaire qui le fait en SQL?
Toutes les réponses seront appréciées, merci d'avoir lu la question!

2
Giochi Blu 26 janv. 2017 à 19:53

4 réponses

Meilleure réponse

Essaye ça :

select * from TABLE where VALUES like  '%[%]%'
1
puzeledbysql 26 janv. 2017 à 17:00

Il existe une option ESCAPE sur LIKE:

select *
from TABLE
where VALUES like '$%%' escape '$';

Tout ce qui suit le caractère d'échappement est traité comme un caractère normal. Cependant, la valeur par défaut est la barre oblique inverse (voir ici), donc la version avec barre oblique inverse doit faire ce que vous voulez.

Bien sûr, vous pouvez également utiliser une expression régulière (bien que cela n'ait aucun espoir d'utiliser un index).

Remarque: escape fait partie de la norme de réponse et devrait donc fonctionner dans n'importe quelle base de données.

1
Gordon Linoff 26 janv. 2017 à 16:59

Vous avez raison de dire que vous aurez besoin d'un personnage d'échappement pour cela. En SQL, vous devez définir le caractère d'échappement.

SELECT * FROM TABLE where VALUES like ESCAPE '!';

Je suis sûr que vous pouvez utiliser le personnage que vous voulez.

Voici un lien vers une explication Microsoft qui va plus en détail.

Explication Microsoft

Explication MySQL

1
GryffensBane 26 janv. 2017 à 17:12

Votre requête

select * from TABLE where VALUES like '\%%'

Devrait marcher. La raison pour laquelle ce n’est pas le cas est que vous avez peut-être { {X0}} activé, ce qui traiterait \ comme un caractère littéral.

Un moyen de l’éviter est d’utiliser LIKE BINARY

select * from TABLE where VALUES like binary '%'

Ou avec une spécification de caractère d'échappement (peut être n'importe quel caractère de votre choix).

select * from TABLE where VALUES like '~%%' escape '~'
2
Vamsi Prabhala 26 janv. 2017 à 17:09