我在Teradata中运行以下查询:
sel requesttext from dbc.tables
where tablename='old_employee_table'
结果:
alter table DB_NAME.employee_table,no fallback ;
我想使用SQL得到以下结果:
DB_NAME.employee_table
Requesttext可以是: 创建集合表DB_NAME.employee_table;
数据库名称和表可以出现在结果中的任何位置。因为。(点)正在加入它们,这就是为什么我要分裂。(点)。
基本上我需要sql,它可以导致我周围的值。(点) 我想在结果中使用DBName和Tablename。
答案 0 :(得分:1)
您可以使用regexp_substr()
或strtok()
执行此操作。
正如Jamie Zawinski所说:
有些人在遇到问题时会想“我知道,我会用 正则表达式。“现在他们有两个问题。
所以我会使用strtok()
方法。我也很懒,正则表达很难。
函数strtok()
有三个参数:
要从查询中返回的字符串中获取<database>.<table>
,我们可以按空格分割,获取第三个标记,然后用逗号分割并获取第一个标记。
这看起来像是:
SELECT strtok(strtok(requestText,' ',3),',',1)
FROM dbc.tables
WHERE tablename='old_employee_table'
答案 1 :(得分:1)
我不是Teradata人,但只要teradata的regexp_substr()
支持正面的后视和正向前瞻断言(这可能会导致Teradata语法错误),这应该适用于目前为止给出的两个字符串,所以可能需要稍微调整一下):
SELECT REGEXP_SUBSTR(requesttext, '(?<= )(\w+\.\w+)(?=[,$]?)', 1, 1)
FROM dbc.tables
WHERE tablename='old_employee_table'
请参阅regex101示例。希望它很容易转化为Teradata。
正则表达式查找并返回单词的任意一侧,包括句点,前面有空格,后跟可选的逗号或行尾。