SQLのTRIM関数を使った文字列操作について、基本的な使い方から実践的なテクニックまでを解説します。データクレンジングやバリデーションに必須の機能ですが、あなたは正しく使いこなせていますか?
SQLで文字列の長さを取得するLENGTH関数とCHARLENGTH関数の使い方
SQLで文字列の長さを取得する方法について、各データベース別の関数の違いや使い方を解説します。LENGTH関数とCHARLENGTH関数の違いって何なのでしょうか?
文字列の長さを取得する関数は、データベース製品によって異なります。主な関数の対応は以下の通りです:
データベース | 使用可能な関数 |
---|---|
MySQL | LENGTH, CHAR_LENGTH |
PostgreSQL | LENGTH, CHAR_LENGTH |
Oracle | LENGTH |
SQL Server | LEN |
Access | LEN |
基本的な使い方を見てみましょう:
-- LENGTH関数の基本的な使い方
SELECT LENGTH('Hello World')
-- カラムに対する使用例
SELECT product_name, LENGTH(product_name) AS name_length
FROM products
LENGTH関数とCHAR_LENGTH関数には重要な違いがあります:
例えば以下のような違いが出ます:
SELECT
'漢字' AS text,
LENGTH('漢字') AS byte_length, -- 6(3バイト×2文字)
CHAR_LENGTH('漢字') AS char_length -- 2(2文字)
FROM dual
文字列の長さを条件にしてデータを検索する方法をご紹介します:
-- 5文字以上の商品名を検索
SELECT product_name
FROM products
WHERE LENGTH(product_name) >= 5
-- 文字数でグループ化して集計
SELECT
CHAR_LENGTH(product_name) AS name_length,
COUNT(*) AS product_count
FROM products
GROUP BY CHAR_LENGTH(product_name)
文字列長さ関数を使用する際のパフォーマンスについて考慮すべき点があります:
-- 非効率な例
SELECT * FROM products WHERE LENGTH(name) = 5
-- 最適化した例
SELECT * FROM products
WHERE name LIKE '_____' -- 5文字を示すアンダースコア
AND LENGTH(name) = 5
文字列長さ関数を使った実践的な応用例をご紹介します:
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50),
password VARCHAR(100),
CONSTRAINT chk_password_length
CHECK (LENGTH(password) >= 8)
)
SELECT
CASE
WHEN CHAR_LENGTH(description) <= 50 THEN '短い説明'
WHEN CHAR_LENGTH(description) <= 100 THEN '標準的な説明'
ELSE '長い説明'
END AS description_type,
COUNT(*) AS count
FROM products
GROUP BY
CASE
WHEN CHAR_LENGTH(description) <= 50 THEN '短い説明'
WHEN CHAR_LENGTH(description) <= 100 THEN '標準的な説明'
ELSE '長い説明'
END
-- 長すぎる商品名を20文字で切り詰める
SELECT
CASE
WHEN CHAR_LENGTH(product_name) > 20
THEN CONCAT(LEFT(product_name, 17), '...')
ELSE product_name
END AS truncated_name
FROM products