kri*_*nab 0 regex sql postgresql split
我在postgres表中有一个字段,如下表所示。我想基于空格作为分隔符将字符串分成两个单独的组件。请注意所有字段都是TEXT。
tablename: intersection_table_wi
wwhid
-----
"102 5"
"104 61"
"103 84"
Run Code Online (Sandbox Code Playgroud)
所以我想将其转换为这样的目标:
wwhid wv002 wv003
----- ----- -----
"102 5" "102" "5"
"104 61" "104" "61"
"103 84" "103" "84"
Run Code Online (Sandbox Code Playgroud)
问题是,当我编写查询时,我不断得到的东西看起来像这样:
wwhid wv002 wv003
----- ----- -----
"102 5" "102 5" ""
"104 61" "104 61" ""
"103 84" "103 84" ""
Run Code Online (Sandbox Code Playgroud)
现在,一个微妙的问题是,在某些情况下,两个子串之间存在多个空格,而在其他情况下,只有一个空格。
我尝试过的查询如下:
UPDATE intersection_table_wi
SET wv002 = SPLIT_PART(BTRIM(whhid), '/\s+', 1),
wv003 = SPLIT_PART(BTRIM(whhid), '/\s+', 2);
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何解决此查询以获得上面指定的目标?
split_part()不支持正则表达式。您只能指定“简单”字符串作为分隔符。
要分割正则表达式,您需要 regexp_split_to_array()
UPDATE intersection_table_wi
SET wv002 = (regexp_split_to_array(BTRIM(whhid), '\s+'))[1],
wv003 = (regexp_split_to_array(BTRIM(whhid), '\s+'))[2];
Run Code Online (Sandbox Code Playgroud)