SUBSTR関数、CASE式、正規表現:LIKE演算子の代替手段
SQLで、列の値が特定の文字列で始まる行を選択するには、LIKE
演算子を使用します。
例
以下のテーブル products
に対して、name
列の値が "A" で始まる行を選択する例です。
SELECT *
FROM products
WHERE name LIKE 'A%';
このSQLは、name
列の値が "A" で始まるすべての行を返します。
詳細
LIKE
演算子は、ワイルドカード文字を使用することができます。
%
は任意の文字列を表します。
以下の例では、name
列の値が "A" で始まり、その後2文字が "b" または "c" である行を選択します。
SELECT *
FROM products
WHERE name LIKE 'A[bc]%';
注意点
- 大文字と小文字は区別されます。
- ワイルドカード文字を使用する場合は、エスケープ処理が必要になる場合があります。
補足
LIKE
演算子は、前方一致だけでなく、部分一致や後方一致にも使用できます。
name
列の値が "A" で終わる行を選択する:
SELECT *
FROM products
WHERE name LIKE '%A';
SELECT *
FROM products
WHERE name LIKE '%A%';
price
列の値が 100 より大きい行を選択する:
SELECT *
FROM products
WHERE price LIKE '100%';
date
列の値が 2023-01-01 以降である行を選択する:
SELECT *
FROM products
WHERE date LIKE '2023-01-01%';
練習問題
以下のテーブル customers
に対して、以下の条件に合致する行を選択するSQLを作成してください。
age
列の値が 20 歳以上country
列の値が "日本" または "アメリカ"
CREATE TABLE customers (
name VARCHAR(255),
age INT,
country VARCHAR(255)
);
INSERT INTO customers (name, age, country) VALUES ('Alice', 25, '日本');
INSERT INTO customers (name, age, country) VALUES ('Bob', 30, 'アメリカ');
INSERT INTO customers (name, age, country) VALUES ('Carol', 18, 'イギリス');
INSERT INTO customers (name, age, country) VALUES ('Dave', 22, '日本');
解答
SELECT *
FROM customers
WHERE name LIKE 'A%'
AND age >= 20
AND country IN ('日本', 'アメリカ');
このSQLは、以下の結果を返します。
name | age | country
------- | -------- | --------
Alice | 25 | 日本
Bob | 30 | アメリカ
Dave | 22 | 日本
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(255),
price DECIMAL(10,2)
);
INSERT INTO products (name, price) VALUES ('Apple', 1.25);
INSERT INTO products (name, price) VALUES ('Banana', 2.00);
INSERT INTO products (name, price) VALUES ('Carrot', 0.50);
INSERT INTO products (name, price) VALUES ('Dog', 100.00);
INSERT INTO products (name, price) VALUES ('Elephant', 1000.00);
前方一致
SELECT *
FROM products
WHERE name LIKE 'A%';
部分一致
SELECT *
FROM products
WHERE name LIKE '%a%';
SELECT *
FROM products
WHERE name LIKE '%e';
数値比較
SELECT *
FROM products
WHERE price > 10;
日付比較
SELECT *
FROM products
WHERE date > '2023-01-01';
複数条件
SELECT *
FROM products
WHERE name LIKE 'A%'
AND price > 10;
実行結果
id | name | price
------- | -------- | --------
1 | Apple | 1.25
2 | Banana | 2.00
id | name | price
------- | -------- | --------
1 | Apple | 1.25
2 | Banana | 2.00
3 | Carrot | 0.50
id | name | price
------- | -------- | --------
5 | Elephant | 1000.00
id | name | price
------- | -------- | --------
2 | Banana | 2.00
3 | Carrot | 0.50
4 | Dog | 100.00
id | name | price
------- | -------- | --------
1 | Apple | 1.25
解説
- 上記のコードは、
products
テーブルに対して様々な条件でデータを取得する例です。 LIKE
演算子は、前方一致、部分一致、後方一致など、様々なパターンで文字列比較を行うことができます。- 複数の条件を組み合わせることで、より複雑な検索を行うことができます。
SQLで列の値が特定の文字列で始まる行を選択する他の方法
SUBSTR
関数は、文字列の一部を切り出すことができます。
SELECT *
FROM products
WHERE SUBSTR(name, 1, 1) = 'A';
CASE
式は、条件によって異なる値を返すことができます。
SELECT *
FROM products
WHERE CASE WHEN LEFT(name, 1) = 'A' THEN 1 ELSE 0 END = 1;
正規表現を使う
SQLite では、REGEXP
演算子を使用して正規表現によるパターンマッチを行うことができます。
SELECT *
FROM products
WHERE name REGEXP '^A.*';
- シンプルな条件の場合は、
LIKE
演算子を使うのが最も簡単です。 - より複雑な条件の場合は、
SUBSTR
関数、CASE
式、または正規表現を使うことができます。
sql sqlite