2017-02-21 7 views
0

ich postgresql bin mit 9 ich eine Anfrage an base64 leite dekodieren Wert und drucken das Ergebnis:Es kann keine varchar und == verketten

SELECT convert_from(decode(CONCAT('aWFuY3VkYXRlc3QrMTAwQGdtYWlsLmNvbQ','=='),'base64'),'utf-8'); 

Aber, wenn ich die gleiche Abfrage über den Tisch laufen bekomme ich Fehler: Version 1 meiner Abfrage:

SELECT t.data,convert_from(decode(CONCAT(t.data,'=='),'base64'),'utf-8') 
FROM table t; 

Die oben gibt mir ERROR: unexpected "=" Version 2 meiner Abfrage:

SELECT t.data,convert_from(decode(t.data,'base64'),'utf-8') 
FROM table t; 

Die oben gibt mir ERROR: invalid byte sequence for encoding "UTF8": 0x8c

t.data ist vom Datentyp Varchar (255) in meiner Tabelle t.

Ich kann nicht herausfinden, wie dieses Problem behoben werden kann. Gibt es eine andere Möglichkeit, Base64-Daten zu decodieren und aus einer Abfrage auszugeben?

+0

haben Sie einfache oder doppelte Anführungszeichen, um diese Abfrage-String? – Sean

+0

Ich habe überhaupt keine Art von Anführungszeichen. Ich denke, es hat mit der Länge des t.data-Wertes zu tun. – sireesha

Antwort

0

Verwenden Sie einfach ||concat statt:

SELECT convert_from(decode('aWFuY3VkYXRlc3QrMTAwQGdtYWlsLmNvbQ' || '==','base64'),'utf-8'); 
     convert_from   
--------------------------- 
[email protected] 

Für Tabelle:

SELECT t.data, 
     convert_from(decode(t.data::text || '==','base64'),'utf-8') 
FROM table t; 
+0

** SELECT t.data, convert_from (entschlüsseln (t.data.promo_code :: text || '=', 'base64'), 'utf-8') Von Tabelle t; ** gibt mir den Fehler unerwartet "=" Ich denke, dass die Länge des t.data-Wertes unterschiedliche Zeilen ist, verursacht den Fehler. – sireesha

+0

Entschuldigung - zwei '=' -> t.data.:text || '==' –

+0

Danke Roman, das Problem wurde teilweise durch Ihren Vorschlag gelöst, aber wirklich, ich hatte einige Datensätze mit weniger Zeichen, die Fehler geworfen haben. – sireesha