2011-04-13 51 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

相关问题