2017-02-21 31 views
0

Я использую PostgreSQL 9 Я бегу запрос к base64 декодировать значение и распечатать его результат:Невозможно объединить в VARCHAR и ==

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

Но, когда я запускаю тот же запрос по таблице , я получаю ошибки: Version 1 моего запроса:

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

выше дает мне ERROR: unexpected "=" Version 2 моего запроса:

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

выше дает мне ERROR: invalid byte sequence for encoding "UTF8": 0x8c

t.data имеет тип данных VARCHAR (255) в моей таблице т.

Не могу понять, как исправить эту проблему. Есть ли другой способ декодирования данных base64 и распечатать его из запроса?

+0

у вас есть одинарные или двойные кавычки вокруг этой строки запроса? – Sean

+0

У меня нет никаких котировок вообще. Я думаю, что это связано с длиной значения t.data. – sireesha

ответ

0

Просто используйте || вместо concat:

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

Для таблицы:

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

** SELECT t.data, convert_from (decode (t.data.promo_code :: text || '=', 'base64'), 'utf-8') Из таблицы t; ** дает мне ошибку неожиданно знак равно Я думаю, что длина значения t.data - это разные строки, вызывая ошибку. – sireesha

+0

Извините - два '=' -> t.data::text || '==' –

+0

Спасибо, Роман, проблема была частично решена вашим предложением, но на самом деле у меня были записи с меньшим количеством символов, которые бросали ошибки. – sireesha