Postgresql

如何使用正則表達式獲取第二個字元序列

  • March 15, 2017

我有一個帶有地址的欄位(例如68 TIDAL BREEZE DR),並且這個正則表達式在最後一個序列(例如68 TIDAL BREEZE)之前獲取所有內容:

substring (address from '(.*) ')

我的問題是,如何修改此表達式以獲取第一個序列(例如 68)之後的所有內容以及最後一個序列(例如 DR)之前的所有內容,如下所示:TIDAL BREEZE

我正在使用 PostgreSQL 9.5。

postgres=# select substring('68 TIDAL BREEZE DR' from '\s+(.*)\s');
 substring
--------------
TIDAL BREEZE
(1 row)

延遲匹配第一個空格字元以切掉第一位。

不使用正則表達式

我強烈建議您不要使用正則表達式解析地址。如果您正在尋找更好的做法,有一種解析地址的方法在此答案中展示和解釋

SELECT * FROM standardize_address(
 'us_lex','us_gaz','us_rules',
 '68 TIDAL BREEZE DR, Citytown Texas, 77346'
);
building | house_num | predir | qual | pretype |     name     | suftype | sufdir | ruralroute | extra |   city   | state | country | postcode | box | unit 
----------+-----------+--------+------+---------+--------------+---------+--------+------------+-------+----------+-------+---------+----------+-----+------
         | 68        |        |      |         | TIDAL BREEZE | DRIVE   |        |            |       | CITYTOWN | TEXAS | USA     | 77346    |     | 
(1 row)

或僅獲得某些值

SELECT house_num || ' Other Stuff ' || suftype AS whatever
FROM standardize_address('us_lex', 'us_gaz', 'us_rules',
 '68 TIDAL BREEZE DR, Citytown Texas, 77346'
);
      whatever       
----------------------
68 Other Stuff DRIVE
(1 row)

引用自:https://dba.stackexchange.com/questions/167244