如何使用REGEXP_EXTRACT在Data Studio中提取特定的字符串

时间:2019-09-20 11:54:48

标签: mysql sql database google-data-studio regexp-substr

我在一个列中有一个ID,当前的格式为:

[P0000000000109669288] (https://link.com/#/company::_e73d4f95_a66f_4366_b32a_3c14be37d510?p=i_start:2019-09-17%2000:45:00&p=i_timezone:America/Los_Angeles&f=session_id:eq:P0000000000109669288)

我只需要获取P0000000000109669288,就可以将方括号之间的数据显示在Google Data Studio中表格的新列中。最终目标是创建一个以该ID作为联合键的联合表(在另一个数据源中,该ID也显示为没有链接)。

我使用REGEXP_EXTRACT尝试了一些公式,例如

REGEXP_EXTRACT(session_id, "[(.*?)]")

但我似乎无法使其正常工作。

这可能吗?

谢谢。

4 个答案:

答案 0 :(得分:1)

假设您的文本始终以方括号内的某些文本开头,然后是可变文本,我认为您可以结合使用SUBSTRING()INSTR()

SUBSTRING(txt, 2, INSTR(txt, ']') - 2)

这种方法的优点是它可以在MySQL的所有版本上使用,尤其是在8.0之前的版本上,其中功能REGEXP_REPLACE()等并不存在。

Demo on DB Fiddle

 WITH a AS (SELECT '[P0000000000109669288] (https://link.com/#/company::_e73d4f95_a66f_4366_b32a_3c14be37d510?p=i_start:2019-09-17%2000:45:00&p=i_timezone:America/Los_Angeles&f=session_id:eq:P0000000000109669288)' txt FROM DUAL)
SELECT SUBSTRING(txt, 2, INSTR(txt, ']') - 2) new_txt FROM a;

| new_txt              |
| -------------------- |
| P0000000000109669288 |

答案 1 :(得分:0)

使用此

SELECT REGEXP_SUBSTR(`session_id`, '\\[P[0-9]*\\]'),'[',''),']')

找到您的会话ID [P0000000000109669288] 您必须删除括号的地方

但是它仅适用于mysql 8.x

好吧,我一个人一个就可以了,请看,我敢死了

SELECT REPLACE(REPLACE(REGEXP_SUBSTR( '[P0000000000109669288] (ht tps://link.com/#/company::_e73d4f95_a66f_4366_b32a_3c14be37d510?p=i_start:2019-09-17%2000:45:00&p=i_timezone:America/Los_Angeles&f=session_id:eq:P0000000000109669288)'
 , '\\[P[0-9]*\\]'),'[',''),']','');

答案 2 :(得分:0)

结合以上答案,我认为我已经找到了:

SUBSTR(session_id,2,40)。

这将从字符串中的第二个符号开始提取所有内容,并在字符串的第40个符号处停止。由于所有ID的长度都相同,因此解决了!!

非常感谢你们!现在,在连接表方面仍然存在一些问题,但如有必要,我将创建另一个线程。

答案 3 :(得分:0)

这个REGEXP_EXTRACT公式可以解决问题:

REGEXP_EXTRACT(session_id, "^\\[(.*)\\]")

RegEx细分
session_id ^开始[时,捕获(.*)[之间的所有]个字符。注意:Google Data Studio中的计算字段将两个反斜杠\\用于特殊的RegEx字符和转义序列,因此使用\\[\\]

要限制捕获到A-Z0-9,可以做到这一点:

REGEXP_EXTRACT(session_id, "^\\[([A-Z0-9]+)\\]")

Google Data Studio Report(嵌入式Google Sheets)进行演示。

2]