我在postgres表中有一个字段,如下表所示。我想根据空格作为分隔符将字符串拆分为两个单独的组件。请注意,所有字段都是TEXT。
tablename: intersection_table_wi
wwhid
-----
"102 5"
"104 61"
"103 84"
所以我想把它转换成这样的目标:
wwhid wv002 wv003
----- ----- -----
"102 5" "102" "5"
"104 61" "104" "61"
"103 84" "103" "84"
问题在于,当我编写查询时,我会继续看到更像这样的东西:
wwhid wv002 wv003
----- ----- -----
"102 5" "102 5" ""
"104 61" "104 61" ""
"103 84" "103 84" ""
现在微妙的问题是,在某些情况下,两个子串之间存在多个空格,而在其他情况下只有一个空格。
我尝试的查询如下:
UPDATE intersection_table_wi
SET wv002 = SPLIT_PART(BTRIM(whhid), '/\s+', 1),
wv003 = SPLIT_PART(BTRIM(whhid), '/\s+', 2);
有谁能告诉我如何修复此查询以获取上面指定的目标?
答案 0 :(得分:4)
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];