で複数の条件を導入することができますは、どのように私は以下のようなSQL文を書きたいLIKE演算子
select * from tbl where col like ('ABC%','XYZ%','PQR%');
私はそれがOR
を使用して行うことができます知っています。しかし、もっと良い解決策があるかどうかを知りたい。ここで
で複数の条件を導入することができますは、どのように私は以下のようなSQL文を書きたいLIKE演算子
select * from tbl where col like ('ABC%','XYZ%','PQR%');
私はそれがOR
を使用して行うことができます知っています。しかし、もっと良い解決策があるかどうかを知りたい。ここで
は別の方法である:ここでは
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)
これは一時的なテーブルの良い使用です。例のパターンで
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);
、あなたはその結果で、最高1回tbl
の各列が表示されますことを確認することができますのでcol
は、複数のパターンに一致することができる方法はありません。しかし、パターンがcol
が複数のパターンと一致するパターンの場合は、DISTINCT
クエリ修飾子を使用する必要があります。
SELECT DISTINCT t.* FROM tbl t JOIN patterns p ON (t.col LIKE p.pattern);
これはPostgreSQLユーザでは機能しません – LittleBobbyTables
これは役立つかもしれない:
select * from tbl where col like '[ABC-XYZ-PQR]%'
私は、SQL Server 2005で、これを使ってきたし、それが働きました。
無関係の結果はありませんか? – NileshChauhan
部分的に一致するコードをデータセットから引き出すのに最適です。同じ基本コードに文字を付加して地理的位置を表す – Hilary
のOracle 10gは、SQLでのPOSIX準拠の正規表現の使用を許可する機能を持っていることは知らない:
この機能の構文の詳細については、Oracle Database SQL Referenceを参照してください。
Regular expressions in Perlを参考にしてください。
コード:
select * from tbl where regexp_like(col, '^(ABC|XYZ|PQR)');
Oracleは確かに 'LIKE 'ABC%''の索引を使用できますが、ファンクション索引でない限り、REGEX操作に索引を使用できるとは思いません。 – symcbean
また、私はORを行っているか、ユニオンクエリを書くことのいずれかによって、オペレータのように複数回に合格する選択肢を持っていなかった同じ要件を持っていました。お使いのパラメータ値が固定されていないか、値がnullのことができます。ビジネスに基づいて行うことができる場合
This worked for me in Oracle 11g:
REGEXP_LIKE (column, 'ABC.*|XYZ.*|PQR.*');
さえ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+'%';
この
機能を試すことができます次のアプローチを試してください。
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
SplitString機能
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)[email protected]);
END;
INSERT INTO @returnList
SELECT @stringToSplit;
RETURN;
END;
SELECT * COL LIKE '[0-9、-Z]は%' TBL から。
このようなSQLのような条件を使用すると、ご希望の回答が得られます
ORに問題がありますか?あるいは動的な条件がありますか? –
ORで何が問題になっていますか?入力の量? –
明らかに、私はリアルタイムでORを使用しました。しかし、私は代わりに他の方法があることを知りたいです – Madhu