Oracle Like 和 between 一起使用

Oracle Like and between used togheter

我原以为 google 搜索起来很简单,但找不到任何解决方案。有没有办法在查询中同时使用 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%' 

有解决办法吗?我正在阅读 "convert" 可能会成功,但我没有运气。

谢谢

您可以使用子字符串

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

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

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

这相当于 scaisEdge 的答案,但它可以利用 REASON_CODE 列上的索引,如果您先调用 SUBSTR().

则无法使用该索引

您必须使用 >=<,因为 BETWEEN 包括两个端点,并且您希望匹配所有内容直到 A26,但不包括 A26。您不能使用 BETWEEN 'A10' AND 'A25',因为以 A25 开头且具有其他字符的字符串高于

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