web-dev-qa-db-fra.com

Utiliser la chaîne contient une fonction dans une requête Oracle SQL

J'utilise une base de données Oracle et je veux savoir comment trouver des lignes dans une colonne de type varchar où les valeurs de cette colonne ont une chaîne qui contient un caractère.

J'essaie quelque chose comme ça (c'est un exemple simple de ce que je veux), mais ça ne marche pas:

select p.name
from   person p
where  p.name contains the character 'A';

Je veux aussi savoir si je peux utiliser une fonction comme chr(1234) où 1234 est un code ASCII au lieu du caractère 'A' Dans mon exemple de requête, car dans mon cas, je souhaite rechercher dans la base de données les valeurs où le nom d'une personne contient le caractère avec 8211 comme ASCII).

Avec la requête select CHR(8211) from dual;, je reçois le caractère spécial que je veux.

Exemple:

select p.name
from   person p
where  p.name contains the character chr(8211);
34
ibaneight

Par lignes Je suppose que vous entendez des lignes dans la table person. Ce que vous cherchez, c'est:

select p.name
from   person p
where  p.name LIKE '%A%'; --contains the character 'A'

Ce qui précède est sensible à la casse. Pour une recherche insensible à la casse, vous pouvez effectuer les opérations suivantes:

select p.name
from   person p
where  UPPER(p.name) LIKE '%A%'; --contains the character 'A' or 'a'

Pour le caractère spécial, vous pouvez faire:

select p.name
from   person p
where  p.name LIKE '%'||chr(8211)||'%'; --contains the character chr(8211)

L'opérateur LIKE correspond à un motif. La syntaxe de cette commande est décrite en détail dans documentation Oracle . Vous utiliserez principalement le % Le signe _ signifie que correspond à zéro ou plusieurs caractères .

65
ADTC

La réponse de ADTC fonctionne bien, mais j'ai trouvé une autre solution et je la poste ici si quelqu'un veut quelque chose de différent.

Je pense que la solution d'ADTC est meilleure, mais la mienne fonctionne également.

Voici l'autre solution que j'ai trouvée

select p.name
from   person p
where  instr(p.name,chr(8211)) > 0; --contains the character chr(8211) 
                                    --at least 1 time

Je vous remercie.

23
ibaneight