我有一个类型为TEXT的列query_params
,但这些值存储为字符串unicode。该列中的每个值都以u
为前缀,并且我很难将其删除
有没有办法从值中删除u
并将值字典转换为列?
例如,查询SELECT query_params FROM api_log LIMIT 2
返回两行
{
u'state': u'CA',
u'page_size': u'1000',
u'market': u'Western',
u'requested_at': u'2014-10-28T00:00:00+00:00'
},
{
u'state': u'NY',
u'page_size': u'1000',
u'market': u'Eastern',
u'requested_at': u'2014-10-28T00:10:00+00:00'
}
是否可以在postgres中处理unicode并转换为列:
state | page_size | market | requested_at
------+-----------+----------+---------------------------
CA | 1000 | Western | 2014-10-28T00:00:00+00:00
NY | 1000 | Eastern | 2014-10-28T00:10:00+00:00
感谢您的帮助。
答案 0 :(得分:1)
你应该删除u
个字母并用双引号替换单引号以获得格式正确的json。然后,您可以使用->>
运算符来获取其属性:
select
v->>'state' as state,
v->>'page_size' as page_size,
v->>'market' as market,
v->>'requested_at' as requested_at
from (
select regexp_replace(query_params, 'u\''([^\'']*)\''', '"\1"', 'g')::json as v
from api_log
) s;
中测试解决方案
中了解POSIX正则表达式
中查找正则表达式的解释