如何使用sql

时间:2015-12-08 20:34:02

标签: sql teradata

我在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。

2 个答案:

答案 0 :(得分:1)

您可以使用regexp_substr()strtok()执行此操作。

正如Jamie Zawinski所说:

  

有些人在遇到问题时会想“我知道,我会用   正则表达式。“现在他们有两个问题。

所以我会使用strtok()方法。我也很懒,正则表达很难。

函数strtok()有三个参数:

  1. 正在拆分的字符串
  2. 分割字符串的分隔符
  3. 要抓取的令牌数。
  4. 要从查询中返回的字符串中获取<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。

正则表达式查找并返回单词的任意一侧,包括句点,前面有空格,后跟可选的逗号或行尾。