【问题标题】:REGEXP in Teradata SQLTeradata SQL 中的正则表达式
【发布时间】:2018-08-02 15:55:50
【问题描述】:

我在表格中有一个列,其中包含“21FEB 的 CTCE 数据添加的电子邮件地址”、“RMESTIMATE0”、“21FEB 的请求 TKT 号码”等文本。由于它们是手动输入的注释,它们没有任何最大字符长度.我需要从列中排除文本中的日期部分(如 21FEB)。日期部分在末尾(其中一些末尾没有 ddmmm),但我不能在这里做 SUBSTR,因为评论的长度不是固定的(没有最大值或最小值)。 REGEXP 在这种情况下可以提供帮助吗?理想情况下,对于列中的值,结果将是 "ADDED EMAIL ADDRESS FROM CTCE DATA","EQUESTED TKT NUMBERS ON" "RMESTIMATE0" 等

【问题讨论】:

  • 日期总是 DDMMM 吗?
  • 是的,列中的日期始终为 DDMMM

标签: teradata teradata-sql-assistant


【解决方案1】:

您可以使用 REGEXP_REPLACE 删除日期部分,例如

RegExp_Replace(x, ' [0-9]{1,2}[A-Z]{3}$','',1,1,'i')

去掉一个空格,后跟一位或两位数字,然后是字符串末尾的三个字符

RegExp_Replace(x, ' [0-9]{1,2}(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)$','',1,1,'i')

删除一个空格,后跟一位或两位数字,然后是字符串末尾的三个字符的月份缩写

【讨论】:

  • 谢谢dnoeth!两个 REGEXP 都适用于列中 90% 的数据。但如果数据是这样的“TREX AUTO REFUND 1843/22FEB”,则不会。两个 REGEXP 都返回整个评论以及末尾 / 之后的日期(MMDD)
  • 1843 是文本中的时间戳。我正在尝试删除 1843/22FEB 并返回“TREX AUTO REFUND”
  • 我可以使用下面的 REGEXP RegExp_Replace(X, ' [0-9]{1,4}/[0-9]{1,2}[AZ]{ 3}$','',1,1,'i')
  • 要捕捉这两种变化,您应该将时间部分设为可选:' ([0-9]{1,4}/)?[0-9]{1,2}[AZ]{3 }$'
  • 谢谢你成功了。我的数据中的值很少,例如“由数据分析员 XXXXXXXXXXXX 审核”和“FF XX XXXXXXXXX”。我正在尝试为此编写一个 REGEXP_REPLACE 以仅返回 'REVIEWED BY DATA ANALYST' 和 'FF XX'。仅第一个示例中的第一个四个单词和第二个示例中的前两个单词,忽略其余部分。你能帮忙吗?
猜你喜欢
  • 2017-08-09
  • 2020-02-25
  • 2019-03-04
  • 2020-01-14
  • 2016-10-08
  • 2021-06-09
  • 2018-01-30
  • 2021-06-09
  • 2016-10-19
相关资源
最近更新 更多