【问题标题】:Oracle Like and between used togheterOracle Like 和 between 一起使用
【发布时间】:2016-05-05 21:32:59
【问题描述】:

我认为这将是一个简单的谷歌搜索,但找不到任何解决方案。有没有办法在查询中同时使用 Like 和 Between?

例子

REASON_CODES

A00 VMC B10
A00 RTD B19
.
.
.
A99 RNT B40

我正在尝试编写如下查询:

Select count(*) from table_1 where REASON_CODES like between '%A10%' and '%A25%' 

有解决办法吗?我正在阅读“转换”可能会成功,但我没有运气。

谢谢

【问题讨论】:

  • SQL Plus 用于 Oracle,而不是 MySQL。
  • 您是只查找从 A10 到 A25 开始的值,还是查找值中任何位置的值?您的数据建议从头开始,但您在查询中使用了前导百分比?
  • 感谢 Barmar 的输入,scaisEdge 提供的解决方案实际上适用于 MySQL 和 SQLPlus,适用于其他有相同问题的人。 Google 通常不会在两者之间存在偏见,因为很多查询是相同的或具有相同的结构。

标签: sql oracle sql-like


【解决方案1】:

如果您只是想匹配 REASON_CODE 字符串的开头,您可以这样做:

SELECT COUNT(*)
FROM table_1
WHERE REASON_CODE >= 'A10' AND REASON_CODE < 'A26'

这相当于 scaisEdge 的回答,但它可以利用REASON_CODE 列上的索引,如果您第一次调用SUBSTR(),则无法使用该索引。

您必须使用&gt;=&lt;,因为BETWEEN 包括两个端点,并且您希望匹配所有内容,但不包括A26。您不能使用BETWEEN 'A10' AND 'A25',因为以A25 开头并包含其他字符的字符串比这更高。

【讨论】:

    【解决方案2】:

    你可以使用子字符串

      Select count(*) from table_1 
      where   substr(reason_codes, 1,3) between 'A10' and 'A25'; 
    

    【讨论】:

    • OP 的建议模式也以 % 开头,所以substr(..., 1, 3) 找不到所有内容?虽然样本数据看起来不错,但需要澄清一下。
    • 查看 OP 提供的数据似乎 reason_codes 匹配的模式 .. 是基于前 3 个字符 ... 所以我建议 substr .. 而不是 like .. (like and between don不能一起工作)
    【解决方案3】:

    Oracle 设置

    CREATE TABLE TABLE_NAME ( REASON_CODES ) AS
    SELECT 'A00 VMC B10' FROM DUAL UNION ALL
    SELECT 'A00 RTD B19' FROM DUAL UNION ALL
    SELECT 'A09 RTD B19' FROM DUAL UNION ALL
    SELECT 'ASD A10 B19' FROM DUAL UNION ALL
    SELECT 'XYZ A20 RTD' FROM DUAL UNION ALL
    SELECT 'ABC XYZ A25' FROM DUAL UNION ALL
    SELECT 'A26 RTD B19' FROM DUAL UNION ALL
    SELECT 'A99 RNT B40' FROM DUAL;
    

    查询

    SELECT *
    FROM   TABLE_NAME
    WHERE  REGEXP_SUBSTR( REASON_CODES, 'A\d{2}' ) BETWEEN 'A10' AND 'A25';
    

    输出

    REASON_CODES
    ------------
    ASD A10 B19  
    XYZ A20 RTD  
    ABC XYZ A25 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多