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?
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'
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