[SQL] 내가 어떻게 LIKE 연산자에서 여러 조건을 도입 할 수 있습니다
SQL내가 어떻게 LIKE 연산자에서 여러 조건을 도입 할 수 있습니다
나는 다음과 같은 SQL 문을 작성하려는 :
select * from tbl where col like ('ABC%','XYZ%','PQR%');
나는 그것이 OR를 사용하여 수행 할 수 있습니다 알고 있습니다. 그러나 나는 더 나은 솔루션이 알고 싶어요.
해결법
-
==============================
1.여기에 또 다른 방법은 다음과 같습니다
여기에 또 다른 방법은 다음과 같습니다
select * from tbl where col like 'ABC%' union select * from tbl where col like 'XYZ%' union select * from tbl where col like 'PQR%';
여기에 확인하는 테스트 코드는 다음과 같습니다
create table tbl (col varchar(255)); insert into tbl (col) values ('ABCDEFG'), ('HIJKLMNO'), ('PQRSTUVW'), ('XYZ'); select * from tbl where col like 'ABC%' union select * from tbl where col like 'XYZ%' union select * from tbl where col like 'PQR%'; +----------+ | col | +----------+ | ABCDEFG | | XYZ | | PQRSTUVW | +----------+ 3 rows in set (0.00 sec)
-
==============================
2.이것은 임시 테이블의 좋은 사용합니다.
이것은 임시 테이블의 좋은 사용합니다.
CREATE TEMPORARY TABLE patterns ( pattern VARCHAR(20) ); INSERT INTO patterns VALUES ('ABC%'), ('XYZ%'), ('PQR%'); SELECT t.* FROM tbl t JOIN patterns p ON (t.col LIKE p.pattern);
예 패턴에서, 당신이 확신 할 수 있도록 결과에서 일단 최대 TBL의 각 행을 볼 수 있습니다, 방법의 COL보다 하나 개의 패턴보다 일치하지 수있다. 당신의 패턴이 COL이 하나 이상 일치 할 수 있도록하는 경우, 당신은 DISTINCT 쿼리 수정을 사용해야합니다.
SELECT DISTINCT t.* FROM tbl t JOIN patterns p ON (t.col LIKE p.pattern);
-
==============================
3.오라클 10g는 SQL의 POSIX 호환 정규 표현식의 사용을 허용 기능이 있습니다 :
오라클 10g는 SQL의 POSIX 호환 정규 표현식의 사용을 허용 기능이 있습니다 :
이 기능에 대한 구문 자세한 내용은 오라클 데이터베이스 SQL 참조 서를 참조하십시오.
예제와 함께 펄의 정규 표현식을 살펴보십시오.
코드 :
select * from tbl where regexp_like(col, '^(ABC|XYZ|PQR)');
-
==============================
4.
select * from tbl where col like 'ABC%' or col like 'XYZ%' or col like 'PQR%';
이 두꺼비와 파워 빌더에서 작동합니다. 나머지에 대해 알고하지 마십시오
-
==============================
5.이 힘 도움말 :
이 힘 도움말 :
select * from tbl where col like '[ABC-XYZ-PQR]%'
나는 SQL Server 2005에서이 작업을 사용했습니다 그것은했다.
-
==============================
6.나는 또한 내가 일을하거나 또는 통합 쿼리를 작성하거나 회사 별처럼 여러 번 전달하는 선택의 여지가 없었 같은 요구를했다.
나는 또한 내가 일을하거나 또는 통합 쿼리를 작성하거나 회사 별처럼 여러 번 전달하는 선택의 여지가 없었 같은 요구를했다.
This worked for me in Oracle 11g: REGEXP_LIKE (column, 'ABC.*|XYZ.*|PQR.*');
-
==============================
7.심지어 u는이 시도 할 수 있습니다
심지어 u는이 시도 할 수 있습니다
함수
CREATE FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20)) RETURNS @Strings TABLE ( position int IDENTITY PRIMARY KEY, value varchar(8000) ) AS BEGIN DECLARE @index int SET @index = -1 WHILE (LEN(@text) > 0) BEGIN SET @index = CHARINDEX(@delimiter , @text) IF (@index = 0) AND (LEN(@text) > 0) BEGIN INSERT INTO @Strings VALUES (@text) BREAK END IF (@index > 1) BEGIN INSERT INTO @Strings VALUES (LEFT(@text, @index - 1)) SET @text = RIGHT(@text, (LEN(@text) - @index)) END ELSE SET @text = RIGHT(@text, (LEN(@text) - @index)) END RETURN END
질문
select * from my_table inner join (select value from fn_split('ABC,MOP',',')) as split_table on my_table.column_name like '%'+split_table.value+'%';
-
==============================
8.사업에 매개 변수 값이 고정되지 않거나 값이 널 (null)을 기반으로 할 수있는 경우는 다음과 같은 접근 방법을 시도 할 수 있습니다.
사업에 매개 변수 값이 고정되지 않거나 값이 널 (null)을 기반으로 할 수있는 경우는 다음과 같은 접근 방법을 시도 할 수 있습니다.
DECLARE @DrugClassstring VARCHAR(MAX); SET @DrugClassstring = 'C3,C2'; -- You can pass null also --------------------------------------------- IF @DrugClassstring IS NULL SET @DrugClassstring = 'C3,C2,C4,C5,RX,OT'; -- If null you can set your all conditional case that will return for all SELECT dn.drugclass_FK , dn.cdrugname FROM drugname AS dn INNER JOIN dbo.SplitString(@DrugClassstring, ',') class ON dn.drugclass_FK = class.[Name] -- SplitString is a a function
분할 문자열 기능
SET ANSI_NULLS ON; GO SET QUOTED_IDENTIFIER ON; GO ALTER FUNCTION [dbo].[SplitString](@stringToSplit VARCHAR(MAX), @delimeter CHAR(1) = ',') RETURNS @returnList TABLE([Name] [NVARCHAR](500)) AS BEGIN --It's use in report sql, before any change concern to everyone DECLARE @name NVARCHAR(255); DECLARE @pos INT; WHILE CHARINDEX(@delimeter, @stringToSplit) > 0 BEGIN SELECT @pos = CHARINDEX(@delimeter, @stringToSplit); SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1); INSERT INTO @returnList SELECT @name; SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos); END; INSERT INTO @returnList SELECT @stringToSplit; RETURN; END;
-
==============================
9.고르다 * 테이블에서 WHERE COL LIKE '[0-9, A-Z] %';
고르다 * 테이블에서 WHERE COL LIKE '[0-9, A-Z] %';
단순히 SQL에서 등으로이 조건을 사용하면 원하는 답을 얻을 것이다
from https://stackoverflow.com/questions/1387612/how-can-i-introduce-multiple-conditions-in-like-operator by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] ID 열 값이 갑자기 SQL 서버 1001 점프 [중복] (0) | 2020.03.27 |
---|---|
[SQL] VBA 매크로 통합 문서에서 엑셀 표에 SQL 쿼리를 수행 (0) | 2020.03.27 |
[SQL] 어떻게 열 필드에 두 행의 차이를 얻으려면? (0) | 2020.03.27 |
[SQL] SELECT 문에서 "이전 행"값에 액세스 할 수있는 방법이 있나요? (0) | 2020.03.27 |
[SQL] SQL Server 인덱스 - 오름차순 또는 내림차순, 어떤 차이가 확인합니까? (0) | 2020.03.27 |