我在一个列中有一个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, "[(.*?)]")
但我似乎无法使其正常工作。
这可能吗?
谢谢。
答案 0 :(得分:1)
假设您的文本始终以方括号内的某些文本开头,然后是可变文本,我认为您可以结合使用SUBSTRING()
和INSTR()
:
SUBSTRING(txt, 2, INSTR(txt, ']') - 2)
这种方法的优点是它可以在MySQL的所有版本上使用,尤其是在8.0之前的版本上,其中功能REGEXP_REPLACE()
等并不存在。
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)进行演示。