【问题标题】:LIKE Wild Card Search in TeradataTeradata 中的 LIKE 通配符搜索
【发布时间】:2018-04-11 18:25:07
【问题描述】:

我在RAPP 01 之类的列中有文本。 RAPP 02 到 RAPP 45 和 RAPP 99。我在 WHERE 子句的 IN 语句中手动包含了所有这些值,但由于数据集庞大,它会减慢查询速度。我试过WHERE SUBSTR(REMARK_TXT,1,7) LIKE 'RIPA [01-45,99]',它没有返回任何数据。你能帮忙吗? 谢谢!

【问题讨论】:

  • 错字? RIPA RAPP
  • Teradata 是否理解 LIKE 中的括号?我认为这是 T-SQL 唯一的事情。
  • 根据您的实际数据,您可以使用SUBSTR(REMARK_TXT,1,7) BETWEEN 'RAPP 01' AND 'RAPP 45' OR SUBSTR(REMARK_TXT,1,7) = 'RAPP 99' 或WHERE REMARK_TXT LIKE 'RIPA %' AND CAST(SUBSTR(REMARK_TXT,6,2) AS INT) IN (1-45,99)
  • @ThorstenKettner:不,它只支持标准 SQL %_,但你可以应用正则表达式函数。
  • 谢谢! SUBSTR(REMARK_TXT,1,7) BETWEEN 'RAPP 01' AND 'RAPP 45' OR SUBSTR(REMARK_TXT,1,7) = 'RAPP 99' 工作!

标签: sql wildcard teradata


【解决方案1】:

您可以在这里使用 REGEXP 功能:

 WHERE REGEXP_SIMILAR(REMARK_TXT, '^RAPP [0-9]{2}$') = 1;

该正则表达式匹配以RAPP 开头的字符串,后跟一个空格,然后是 2 个数字和字符串的结尾。


更新以处理两个数字范围 (01-49) 和 (99)。这不是用正则表达式做的最好的事情,但它仍然是可能的:

 WHERE REGEXP_SIMILAR(REMARK_TXT, '^RAPP ([0-4][0-9]|99)$') = 1;

这表示一个以RAPP 开头的字符串,然后以从0 到4 开头的两位数或数字99 结尾

【讨论】:

  • 谢谢!有效。我只想单独看 RAPP 01-45 和 RAPP 99。有没有办法将它集成到您​​提到的 REGEXP 中?
  • 我已经更新了处理数字范围的答案。
【解决方案2】:

您可以使用以下内容:

where column like ('RAPP %')

这将返回以字符串RAPP 和空格开头的任何内容。注意“%”符号,这将是您的通配符。 小心使用like,尤其是not like 并将通配符放在条件的开头,它会产生更大的性能问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 2011-01-06
    • 1970-01-01
    • 2015-07-25
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多