コマンド道場

$ man trim

TRIM

文字列関数

文字列の前後の空白(や指定した文字)を取り除く。

呼び出しの形

TRIM(文字列)
TRIM(BOTH 文字 FROM 文字列)
TRIM(LEADING 文字 FROM 文字列)
TRIM(TRAILING 文字 FROM 文字列)

つまずきやすいところ

  • 全角空白は既定では取り除かれません。 日本語のデータでは、取り除く文字に全角空白を明示するか、REPLACE で先に置き換えてください。

  • TRIM が消すのは前後だけです。文字列の途中の空白は残ります。

  • char(n) 型は値が空白で埋められるため、TRIM を通すかどうかで比較結果が変わることがあります。

実行例

結果は実際に流したものです。同じ SQL を 自由に打てる画面 で試すと、同じ結果になります。

取り除く範囲を選ぶ
SELECT '[' || TRIM('  空白つき  ') || ']' AS ryouhou, '[' || TRIM(LEADING FROM '  空白つき  ') || ']' AS mae_dake, '[' || TRIM(TRAILING FROM '  空白つき  ') || ']' AS ushiro_dake
ryouhoumae_dakeushiro_dake
[空白つき][空白つき ][ 空白つき]

1

角括弧で囲むと、どこが削れたかが見えます。

全角空白は既定では取り除かれない
SELECT '[' || TRIM(' 全角空白 ') || ']' AS zenkaku_wa_kienai, '[' || TRIM(' ' FROM ' 全角空白 ') || ']' AS moji_wo_shitei
zenkaku_wa_kienaimoji_wo_shitei
[ 全角空白 ][全角空白]

1

取り除く文字として明示すれば消えます。

説明

TRIM は前後の空白を取り除きます。取り除く文字を指定することもでき、LEADING(前だけ)TRAILING(後ろだけ)BOTH(両方・既定)で範囲を選べます。

入力された文字列を比較する前に通しておくと、「見た目は同じなのに一致しない」を減らせます。コピー&ペーストで紛れ込む末尾の空白は、目で見て気づけません。

⚠️ 取り除けるのは指定した文字だけです。全角空白(U+3000)は半角空白とは別の文字なので、既定の TRIM では取り除かれません。日本語のデータでは必ず引っかかります。

次に読む

根拠にした一次情報