[SQL Server] LIKEで「_」、「%」が入った文字を検索する方法

inno
2014-09-17 15:48 5281 0
MS-SQL / SQL Server
LIKEで「_」、「%」が入った文字を検索する方法。

LIKEで検索する時に「_」(アンダーバー)、「%」(パセント)はそれぞれ意味がある。

「_」(アンダーバー)の場合、テストしながら確認してみよう。

--#### テストテーブル作成
CREATE TABLE dbo.TempData
(
Data1 varchar(50)
)

--#### テストデータ登録
INSERT INTO dbo.TempData
SELECT 'abcd' UNION ALL
SELECT 'abDd' UNION ALL
SELECT 'ab1d' UNION ALL
SELECT 'ab#d' UNION ALL
SELECT 'abcdef' UNION ALL
SELECT 'ab1def' UNION ALL
SELECT 'ab_d' UNION ALL
SELECT 'ab_d1' UNION ALL
SELECT 'ab_d2' UNION ALL
SELECT 'ab_d%3'

では、下記のクエリを実行してどんな結果がでるのか確認してみましょう。

SELECT * FROM dbo.TempData WHERE Data1 like 'ab_d%'

実行結果




上記のクエリだとData1列のデータに1,2文字目が’ab’、4文字目が’d’で3文字目は任意の1文字を含むデータを検索って意味。
じゃ、3文字目を任意の1文字ではなく文字列「_」として認識させて検索したい時はどうすればいいの?
例えば、上記のSQLのデータだと、
ab_d、ab_d1、ab_d2、ab_d3 だけ検索したい。
こういう場合は3文字目の「_」を無効化する必要がある。
その方法がこれだ。

SELECT * FROM dbo.TempData WHERE Data1 like 'ab\_d%' ESCAPE '\'

3文字目「_」の前に「\」文字をつけて後に、
SQL後ろの方に 「ESCAPE ‘\’」を追加して検索することで「_」を文字列で認識させるのだ。

もしくは下記のように作成してもできる。

SELECT * FROM dbo.TempData WHERE Data1 like 'ab[_]d%'

「_」の前後に[ 、] をつけて検索すると「_」を文字列として認識させ検索することができる。

実行結果



「%」(パセント)の場合、テストしながら確認してみよう。
この場合も上記の同じ方法で検索するばできる。

SELECT * FROM dbo.TempData WHERE Data1 like 'ab_d[%]%'
--もしくは
SELECT * FROM dbo.TempData WHERE Data1 like 'ab_d\%%' ESCAPE '\'

実行結果



必ず、テストをして結果を確認して理解してください。
意外と重要です。~

コメント