2011-04-13 52 views
0

我有這組數據中的PostgreSQL:如何從子字符串與正則表達式匹配中修剪結果?

en_MY_V2_CID_MY_SEM_1_1_0_0 
en_MY_V2_CID_MY_SEM_2_101_1703_0 
en_MY_V2_CID_MY_SEM_2_101_1724_0 
en_MY_CID_MY_DIS_1_100_1705_0068 
en_MY_CID_MY_DIS_1_100_1705_0068 

我想提取喜歡這些子串:

en_MY_V2_CID_MY_SEM_1 
en_MY_V2_CID_MY_SEM_2 
en_MY_V2_CID_MY_SEM_2 
en_MY_CID_MY_DIS_1 
en_MY_CID_MY_DIS_1 

問題是,左側的結構是不恆定的,所以我不能使用正則表達式來掌握它們。相反,右側結構不變,格式爲_numbers_numbers_numbers_numbers。所以我嘗試做使用此查詢在PostgreSQL中:

select substring(name from '_\d+_\d+_\d+$') from logs; 

並獲得:

1_0_0 
101_1703_0 
101_1724_0 
100_1705_0068 
1705_0068 

所以現在的問題是,我怎麼否定,或修剪先前子,所以我會得到我的結果?

回答

2

使用rexep_replace

select regexp_replace(name,E'\(\\w\)_\\d+_\\d+_\\d+$',E'\\1') from logs; 
+2

或簡單一些:'選擇REGEXP_REPLACE(姓名,E '_ \\ d + _ \\ d + _ \\ d + $', '')從日誌;' – bart 2011-04-13 12:29:25

+0

兩個解決方案的作品,感謝一羣傢伙! – Khairul 2011-04-14 07:41:09

相關問題