[SQL] 수있는 "IN"연산자를 사용 오라클에서 LIKE-와일드 카드 (%)?
SQL수있는 "IN"연산자를 사용 오라클에서 LIKE-와일드 카드 (%)?
나는이 질문을 검색,와 MySQL에서 답을 찾았지만이는 문이 오라클로 건너에 실패하는 사건 중 하나입니다했다.
나는 "IN"MySQL의 문에 와일드 카드를 사용할 수 있습니까? 거의 요약 내 질문에 위로 내가하고 싶은 것이 있지만, 오라클
나는의 법적 상당을 찾을 싶습니다
Select * from myTable m
where m.status not in ('Done%', 'Finished except%', 'In Progress%')
어떤 도움을 주셔서 감사합니다
해결법
-
==============================
1.
Select * from myTable m where m.status not like 'Done%' and m.status not like 'Finished except%' and m.status not like 'In Progress%'
-
==============================
2.당신이 너무 정규 표현식 사용할 수있는 것
당신이 너무 정규 표현식 사용할 수있는 것
NOT REGEXP_LIKE (필드, '^ 완료 | ^ 완료')
나는이 비록 수행하는 방법을 잘 모르겠어요 ... 여기 참조
-
==============================
3.이것은 당신이 찾고있는 무엇에 맞게 나타납니다 https://forums.oracle.com/forums/thread.jspa?threadID=2140801
이것은 당신이 찾고있는 무엇에 맞게 나타납니다 https://forums.oracle.com/forums/thread.jspa?threadID=2140801
기본적으로, 당신이 오라클에 내장 아무것도 거기에 표시되는 정규 표현식을 사용해야합니다.
나는 스레드에서 예제를 꺼내 당신의 목적을 변환. 그래서 그 힘의 필요 불통 :하지만, 정규식의 빨아
SELECT * FROM myTable m WHERE NOT regexp_like(m.status,'((Done^|Finished except^|In Progress^)')
-
==============================
4.당신은 그러나 종류 그 일의 내부 아웃 방식의, 찾고 있던 것을 100 % :
당신은 그러나 종류 그 일의 내부 아웃 방식의, 찾고 있던 것을 100 % :
SQL> CREATE TABLE mytable (id NUMBER, status VARCHAR2(50)); Table created. SQL> INSERT INTO mytable VALUES (1,'Finished except pouring water on witch'); 1 row created. SQL> INSERT INTO mytable VALUES (2,'Finished except clicking ruby-slipper heels'); 1 row created. SQL> INSERT INTO mytable VALUES (3,'You shall (not?) pass'); 1 row created. SQL> INSERT INTO mytable VALUES (4,'Done'); 1 row created. SQL> INSERT INTO mytable VALUES (5,'Done with it.'); 1 row created. SQL> INSERT INTO mytable VALUES (6,'In Progress'); 1 row created. SQL> INSERT INTO mytable VALUES (7,'In progress, OK?'); 1 row created. SQL> INSERT INTO mytable VALUES (8,'In Progress Check Back In Three Days'' Time'); 1 row created. SQL> SELECT * 2 FROM mytable m 3 WHERE +1 NOT IN (INSTR(m.status,'Done') 4 , INSTR(m.status,'Finished except') 5 , INSTR(m.status,'In Progress')); ID STATUS ---------- -------------------------------------------------- 3 You shall (not?) pass 7 In progress, OK? SQL>
-
==============================
5.다소 뒤얽힌, 그러나 :
다소 뒤얽힌, 그러나 :
Select * from myTable m join (SELECT a.COLUMN_VALUE || b.COLUMN_VALUE status FROM (TABLE(Sys.Dbms_Debug_Vc2coll('Done', 'Finished except', 'In Progress'))) a JOIN (Select '%' COLUMN_VALUE from dual) b on 1=1) params on params.status like m.status;
이것은 매우 독특한 문제에 대한 해결책 이었지만, 사람을 도움이 될 수 있습니다. 본질적으로 "처럼"문이없는 나는이 "와 같은에서"빠른 동적를 만들기 위해 만든 있도록 열의 첫 번째 variable_n 문자에 대한 인덱스를 얻을 수있는 방법이 없었다 SSRS에 사용.
( '진행 중' '를 제외하고 완료' '완료') 목록의 내용이 변수가 될 수 있습니다.
-
==============================
6.질문에서 언급 한 불법 구문과 가장 가까운 법률 것과 동일합니다 :
질문에서 언급 한 불법 구문과 가장 가까운 법률 것과 동일합니다 :
select * from myTable m where not exists ( select 1 from table(sys.ku$_vcnt('Done', 'Finished except', 'In Progress')) patterns where m.status like patterns.column_value || '%' )
광산 및 Sethionic의 대답 @ 모두 (단지 auxiliar sys.whatever 테이블이 아닌 다른 소스를 선택하여) 동적 목록 패턴을 가능하게한다.
우리가 (처음부터이 아닌) 패턴의 내부 문자열을 검색했고 경우 주 데이터베이스는, = '진행 중 완료'를 예를 들어 상태를 포함 내 솔루션 (수정이 좋아하는 '%'|| patterns.column_value || '%') 여전히 주어진 레코드에 대해 하나 개의 행을 생성하는 것, whileas Sethionic의 솔루션 @ 각 패턴의 선두로부터 여러 행을 생산하는 것 (다른 auxiliar에 수정은 전에 가입). 더 나은 어떤 판단하지, 단지 차이점을 인식하고 더 나은 적합 당신의 필요를 선택합니다.
from https://stackoverflow.com/questions/9540087/can-the-in-operator-use-like-wildcards-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] WHERE IN 절에서 SQL 사용 CASE 문 (0) | 2020.07.05 |
---|---|
[SQL] SQL Server의 분 계산 시간 차이 (0) | 2020.07.05 |
[SQL] 어떻게 SQL을 사용하여 문자열에서 특정 문자의 발생 횟수를 찾을 수 있습니까? (0) | 2020.07.05 |
[SQL] 가장 안전한 방법은 테이블에서 마지막 레코드 ID를 얻으려면 (0) | 2020.07.05 |
[SQL] 어떻게 DATETIME 컬럼에 1 년 추가하는 SQL UPDATE 문을 사용할 수 있습니까? (0) | 2020.07.05 |