2017-02-21 63 views
0

我使用PostgreSQL 9 我运行一个查询为Base64解码值并打印其结果:无法串联一个varchar和==

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

但是,当我运行相同的查询过表,我得到的错误: 我查询的版本1:

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

上面给我我的查询的ERROR: unexpected "=" 版本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在我的表t是数据类型为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') FROM table t; **给我意想不到的错误“=”。我认为t.data值的长度是不同的行导致的错误。 – sireesha

+0

对不起 - 两个'=' - > t.data::text || '==' –

+0

谢谢你,罗马,这个问题部分由你的建议解决,但是真的,我有一些记录中包含的错误字符少。 – sireesha