PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Django. PostgreSQL. regexp_split_to_table ne fonctionne pas

La barre oblique inverse est traitée comme un méta-caractère par Django et est interprétée à l'intérieur de guillemets doubles. Donc, une couche de E'\\s+') est supprimé avant que la chaîne n'arrive au serveur PostgreSQL, qui verra E'\s+') . La chaîne d'échappement se traduira par 's+' qui à son tour fera regexp_split_to_table() divisez vos chaînes en un nombre quelconque de s au lieu de l'espace non imprimable, que la classe de caractères raccourcie \s signifie dans les expressions régulières.

Doublez vos barres obliques inverses dans la chaîne pour obtenir ce que vous vouliez :E'\\\\s+') :

"SELECT regexp_split_to_table(field_name, E'\\\\s+') FROM mytable LIMIT 20"

Comme alternative, pour éviter les problèmes avec la signification particulière de la barre oblique inverse \ , vous pouvez utiliser [[:space:]] pour désigner la même classe de caractères :

"SELECT regexp_split_to_table(field_name, '[[:space:]]+') FROM mytable LIMIT 20"

Détails dans le chapitre " Pattern Matching" dans le manuel .