我的表格中有一列格式为:
COURSE_214/MODULE_5825/SUBMODULE_123/..../GOAL_124/ACTIVITY_125.
我需要目标的价值,即来自goal_124的124。我打算使用'regexp_split_to_array',但不知道如何使用数组中的元素。
我正在使用postgres 9.2。
答案 0 :(得分:1)
你可以这样使用split_part
:
select split_part(split_part('COURSE_214/MODULE_5825/SUBMODULE_123/..../GOAL_124/ACTIVITY_125', '/GOAL_', 2), '/', 1)
i.e.
select split_part(split_part(fieldname, '/GOAL_', 2), '/', 1)
Result:
124
答案 1 :(得分:1)
select json_object(string_to_array(translate(params, '_', '/'), '/'))
from test
json_object
------------------------------------------------------------------------------------------------
{"COURSE" : "214", "MODULE" : "5825", "SUBMODULE" : "123", "GOAL" : "124", "ACTIVITY" : "125"}
(1 row)
select json_object(string_to_array(translate(params, '_', '/'), '/'))->>'GOAL' as goal
from test
goal
------
124
(1 row)
该列的格式适合json。我建议将列的类型更改为jsonb
。第一个查询可以用作转换器。
转换后,您将以简单的方式访问参数,例如:
select *
from test
where params->>'COURSE' = '214'
and (params->>'GOAL')::int > 120;
简单选择所有GOAL_
个参数(如果有多个参数)
select ltrim(elem, 'GOAL_')
from (
select unnest(string_to_array(params, '/')) elem
from test
) sub
where elem like 'GOAL_%'
答案 2 :(得分:0)
您可以尝试使用正则表达式,在斜杠之间获取字符串
select substring(your_column from '^.*/(.*)/.*$') from your_table
如果您希望在该部分找到GOAL值,请使用
select substring(your_column from '/GOAL_(.*)/') from your_table