postgresql 9.5:尝试根据空格将字符串拆分为两个字段

时间:2017-05-22 04:25:46

标签: sql regex postgresql split

我在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);

有谁能告诉我如何修复此查询以获取上面指定的目标?

1 个答案:

答案 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];