我认为这本来是一个简单的谷歌搜索,但找不到任何解决方案。有没有办法在查询中一起使用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%'
有解决办法吗?我正在阅读“转换”可能会做的伎俩,但我没有运气。
由于
答案 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