PostgreSQL 9.5:尝试根据空格将字符串分成两个字段

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)

谁能告诉我如何解决此查询以获得上面指定的目标?

a_h*_*ame 6

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)