web-dev-qa-db-fra.com

Comment échapper aux traits de soulignement dans Postgresql

Lors de la recherche de traits de soulignement dans Postgresql, l'utilisation littérale du caractère _ ne fonctionne pas. Par exemple, si vous souhaitez rechercher dans toutes vos tables des colonnes se terminant par _by, pour quelque chose comme le journal des modifications ou les informations sur l'activité, par exemple updated_by, reviewed_by, etc., la requête suivante fonctionne presque:

SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%_by'

Il ignore complètement le trait de soulignement et renvoie comme si vous aviez recherché LIKE '%by'. Ce n'est peut-être pas un problème dans tous les cas, mais il peut en être un. Comment rechercher des traits de soulignement?

21
Joe M

Vous devez utiliser une barre oblique inverse pour échapper au trait de soulignement. Modifiez l'exemple de requête comme suit:

SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%\_by'
20
Joe M

Je suis juste tombé sur le même problème et la barre oblique inverse unique ne fonctionnait pas aussi bien. J'ai trouvé cette documentation sur la communauté PostgreSQL et cela a fonctionné:

La bonne façon est d'échapper au trait de soulignement avec une barre oblique inverse. Vous devez en fait écrire deux barres obliques inverses dans votre requête:

sélectionnez * de foo où la barre comme '% \\ _ baz'

La première barre oblique inverse cite la seconde pour l'analyseur de requête, de sorte que ce qui se retrouve à l'intérieur du système est%\_ baz, puis la fonction LIKE sait quoi faire avec cela.

Par conséquent, utilisez quelque chose comme ceci:

SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%\\_by'

Documentation source: https://www.postgresql.org/message-id/10965.962991238%40sss.pgh.pa.us

3
Taylor D