2016-01-11 10 views
5

kann ich Leerzeichen siehe Vorder-/Hinter nicht-Anweisung in der folgenden folgenden SQL mit psql ausgeführt:Wie zeigen führende/nachgestellte Leerzeichen in einer PostgreSQL-Spalte?

select name from my_table; 

Gibt es eine pragmatische Art und Weise führende/nachfolgende Leerzeichen zu sehen?

+4

Nichts eingebaute soweit ich weiß. Normalerweise umschließe ich die Werte mit einem "Marker" -Zeichen: 'select '>' || name || '<' from my_table' –

+0

statt nur name try '' '|| name ||' '' –

+0

Für was es wert ist , PgAdmin wird Ihnen die Leerzeichen geben – Hambone

Antwort

3

Wenn Sie nichts dagegen nicht alle Leerzeichen ersetzt, ob sie sind Vorder-/Hinter, so etwas wie das folgende wird es tun:

SELECT REPLACE(REPLACE(REPLACE(REPLACE(txt, ' ', '_'), 
           E'\t', '\t'), 
         E'\r', '\r'), 
       E'\n', '\n') AS txt 
FROM test; 

Dieser Unterstrich wird unter Verwendung der Räume zu markieren, aber natürlich Sie können selbst wählen. Siehe SQL fiddle demo.

Wenn Sie nur die führenden/hinteren anzeigen wollen, wird es komplexer - aber wenn dies wirklich gewünscht wird, kann etwas mit regex_replace möglich sein.

+0

Ja, das sollte funktionieren. In meinem Fall wäre ein 'REPLACE (txt, '', '_')' genug. – guettli

2

Eine der Optionen ist die Verwendung der Funktion format().

Bei gegebenen Abfrage Fall: select format('"%s"', name) from my_table;

PoC:

SELECT format('"%s"', name) 
FROM (VALUES (' a '), (' b ')) v(name); 

format 
-------- 
" a " 
" b " 
(2 rows) 
+0

Dies scheint nicht mehrere Leerzeichen anzuzeigen? Vergleich der beiden Methoden [hier] (http://sqlfiddle.com/#!15/2944e/6). –

+1

@SteveChambers - nicht sicher, warum Sie ein solches Ergebnis erhalten. Z.B. wenn ich 'SELECT-Format ('"% s "', Name) FROM (Werte (E '\ t Hello there \ t \ r')) v (Name);' Ich bekomme: '" Hallo there \ r "' . '\ N' wurde entfernt, da Kommentare hier nicht mehrzeilig erlaubt sind. Aber Format() hebt sie nicht als Ihre replace() -Lösung hervor - je nachdem, wie Sie Whitespace erfassen möchten, können Sie entweder die eine oder andere Lösung wählen. Die Frage war auch vorangestelltes/hinteres Leerzeichen, also kann format() in diesem Kontext eine Option sein, um es zu lösen, ohne multiple replace() - s zu benutzen: –

+0

Entschuldigung - ich stehe korrigiert - es funktioniert im rextester: http: //rextester.com/FYNM80952 Nicht sicher warum, aber vielleicht etwas damit zu tun, wie SQLFiddle die Ergebnisse präsentiert? –

0

Schalten Sie "ausgerichtet Modus" in psql: \a

\a 
select * from my_table; 

id|col1|col2 
12|foo|bar