【问题标题】:Teradata Sub-string Before and After certain character特定字符之前和之后的 Teradata 子字符串
【发布时间】:2018-12-18 00:51:15
【问题描述】:

我正在寻找一种方法来提取 Teradata 中某个字符之前和之后的文本。例如,我有一列除了中间的单词之外是一致的 - 我想提取它。

我有这两个例子:

  1. “客户激活帐户 DD:ABCD,日期 XXXX”
  2. “客户激活帐户 DD:EFGH,日期 XXXX”

我需要存在于“:”之后和“,”之前的文本——在本例中为 ABCD 或 EFGH。到目前为止,我有SUBSTRING (column FROM POSITION ('DD: ' IN column) +4),但它会返回“:”之后的所有内容,例如ABCD, ON DATE XXXX

【问题讨论】:

  • 你试过SUBSTRING(column FROM POSITION(‘DD: ‘ IN column) FOR 4)吗?
  • 如果我提取的字符总是相同的大小,那将起作用。我最终找到了一个解决方法,首先做我上面做的事情,把所有东西都放在一个临时表中,然后使用: SUBSTRING([COLUMN],0, CHARINDEX(',',[COLUMN])) AS COLUMN_NAME

标签: sql teradata


【解决方案1】:

您可以使用正则表达式来提取 ':' 和 ',' 之间的信息以满足给定的要求。

SELECT regexp_substr('Customer Activated Account DD: EFGH, ON DATE XXXX','[^:,]+',1,2);
SELECT regexp_substr('Customer Activated Account DD: ABCD, ON DATE XXXX','[^:,]+',1,2);

[^:,] 用于分割字符串,然后第二个位置的单词是所需的输出

【讨论】:

    【解决方案2】:

    我同意 regexp_substr 在这种情况下更好。但是,如果您的定界符是固定的, strtok 会很有帮助。在您的情况下,这可能有效:

    STRTOK(STRTOK(column,':',2),',',1)
    

    第一个参数是输入的字符串/列;第二个分隔符;第三个是观察数 n。

    【讨论】:

      猜你喜欢
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 2015-06-06
      • 2022-01-09
      • 2020-07-29
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多