oracle 甲骨文象和象之间一起使用

b5lpy0ml  于 2022-11-22  发布在  Oracle
关注(0)|答案(3)|浏览(137)

我想这应该是一个简单的谷歌搜索,但找不到任何解决方案。有没有办法在一个查询中一起使用喜欢和之间?
范例

REASON_CODES

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

我尝试编写如下查询:

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

有没有解决办法做到这一点?我在阅读“转换”可能会做到这一点,但我没有运气。
谢谢

h22fl7wq

h22fl7wq1#

可以使用子字符串

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

9o685dep2#

如果 您 只是 尝试 匹配 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 开头 并 包含 其他 字符 的 字符 串 高于 此 值 。

rjjhvcjd

rjjhvcjd3#

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

相关问题