我有格式的值我的表有一欄:越來越格式化列值
COURSE_214/MODULE_5825/SUBMODULE_123/..../GOAL_124/ACTIVITY_125.
我需要的價值目標,即124 goal_124。我打算使用'regexp_split_to_array',但不知道如何使用數組中的元素。
我正在使用postgres 9.2。
我有格式的值我的表有一欄:越來越格式化列值
COURSE_214/MODULE_5825/SUBMODULE_123/..../GOAL_124/ACTIVITY_125.
我需要的價值目標,即124 goal_124。我打算使用'regexp_split_to_array',但不知道如何使用數組中的元素。
我正在使用postgres 9.2。
您可以使用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
您可以嘗試使用正則表達式,得到斜線之間
select substring(your_column from '^.*/(.*)/.*$') from your_table
如果您希望在該部分找到目標值,使用字符串
select substring(your_column from '/GOAL_(.*)/') from your_table
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_%'
這是json與string_to_array結合使用的非常好的用法,並且翻譯 – zedfoxus
這不適用於我。 string_to_array()函數返回以下形式的結果:{COURSE,249,MODULE,6312,GOAL,9059,ACTIVITY,8774,ACTIVITY,8800}。當我將它傳遞給json_object()時,出現錯誤:'function json_object(text [])does not exist' – Jayant
要使用'json_object()',你需要Postgres 9.3+(對於'jsonb'類型 - 9.4 +)。 – klin
謝謝...假設有多個'GOAL_'字段......那麼如何得到它? json_object不適用於我,因爲我使用的是postgres 9.2 – Jayant