我在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
所以问题是,我如何否定或修剪以前的子字符串以便得到我的结果?
答案 0 :(得分:3)
使用rexep_replace
select regexp_replace(name,E'\(\\w\)_\\d+_\\d+_\\d+$',E'\\1') from logs;