如何在Snowflake中用REGEXP_SUBSTR提取不同格式的TABLE_NAME
解决Snowflake中提取ALTER TABLE语句里的TABLE_NAME问题
你可以调整正则表达式,匹配带库/模式前缀或不带前缀的表名格式,具体SQL如下:
SELECT REGEXP_SUBSTR(query_text, 'ALTER TABLE (?:[0-9A-Za-z\\-\\_]+\\.)*([0-9A-Za-z\\-\\_]+) ADD COLUMN', 1, 1, 'e', 1);
正则逻辑说明:
(?:[0-9A-Za-z\\-\\_]+\\.)*:非捕获组,用来匹配0个或多个「标识符+点」的前缀(比如DATABASE_NAME.或SCHEMA_NAME.,组合起来的DATABASE_NAME.SCHEMA_NAME.也能匹配),*表示这个前缀可以出现0次(对应第三种无前缀的表名格式)。([0-9A-Za-z\\-\\_]+):捕获组1,也就是我们要提取的TABLE_NAME,匹配最后一个由字母、数字、下划线、减号组成的标识符。- 最后通过
'e'参数指定提取第1个捕获组的内容。
如果需要忽略大小写匹配(比如语句里是alter table小写形式),可以把参数改成'ei':
SELECT REGEXP_SUBSTR(query_text, 'ALTER TABLE (?:[0-9A-Za-z\\-\\_]+\\.)*([0-9A-Za-z\\-\\_]+) ADD COLUMN', 1, 1, 'ei', 1);
内容的提问来源于stack exchange,提问作者kiwiLime
相关产品推荐
相关产品推荐

