Oracle喜欢和之间用过的东西

时间:2016-05-05 21:32:59

标签: sql oracle sql-like

我认为这本来是一个简单的谷歌搜索,但找不到任何解决方案。有没有办法在查询中一起使用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%' 

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

由于

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

您可以使用子字符串

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

答案 2 :(得分:1)

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