2016-05-05 3 views
3

Ich dachte, dies wäre eine einfache Google-Suche gewesen, aber konnte keine Lösungen finden. Gibt es eine Möglichkeit, Like und Between in einer Abfrage zu verwenden?Oracle Wie und zwischen verwendeten togheter

Beispiel

REASON_CODES 

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

ich wie eine Abfrage zu schreiben versuchen:

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

Gibt es eine Lösung, dies zu tun? Ich las "konvertieren" mag den Trick, aber ich hatte kein Glück.

Dank

+1

SQL Plus ist mit Oracle verwendet, nicht MySQL. – Barmar

+3

Suchen Sie nur nach Werten, die mit A10 bis A25 beginnen, oder mit Werten in den Werten? In Ihren Daten wird vorgeschlagen, mit "beginnend mit" zu beginnen, aber Sie haben eine führende% in Ihrer Suchanfrage verwendet. –

+0

Dank Barmar für Ihre Eingabe, die Lösung ScaisEdge gab tatsächlich funktioniert für MySQL und SQLPlus für jeden anderen mit der gleichen Frage. Google ist in der Regel keine Voreingenommenheit zwischen den beiden, da viele der Abfragen gleich sind oder die gleiche Struktur haben. – connollyc4

Antwort

1

Sie Teilzeichenfolge

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

Das vorgeschlagene Muster des OPs beginnt ebenfalls mit%, also wird 'substr (..., 1, 3)' nicht alles finden? Obwohl die Beispieldaten dies in Ordnung erscheinen lassen, muss dies geklärt werden. –

+0

Blick auf die Daten zur Verfügung durch OP scheint das Muster der reason_codes übereinstimmen .. ist Basis auf der ersten 3 char ... so schlug ich substr .. anstelle von wie .. (wie und zwischen nicht arbeiten togheter) – scaisEdge

2

Wenn Sie nur versuchen, passend zum Anfang der REASON_CODE Strings verwenden können, die Sie tun können:

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

Dies entspricht Die Antwort von scaisEdge, aber sie kann einen Index für die Spalte nutzen, die nicht verwendet werden kann, wenn Sie zuerst SUBSTR() aufrufen.

Sie haben >= und < zu verwenden, da BETWEEN beide Endpunkte enthält, und Sie wollen alles zusammenpassen, aber nicht A26 einschließlich. Sie können BETWEEN 'A10' AND 'A25' nicht verwenden, da Strings, die mit A25 beginnen und zusätzliche Zeichen haben, höher sind.

1

Oracle-Setup:

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; 

Abfrage:

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

Ausgang:

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