[Oracle SQL] CHARとVARCHAR2型の比較結果の違いを検証する

Pocket

ここでは、Oracle(だけかどうかは知らない)において、CHARとVARCHAR2型の比較の違いについて検証してみます。

スポンサーリンク

CHARとVARCHAR2型の比較を検証

以下のレコードがあるものとします。

カラム名
col1char(4)‘val1’
col2char(6)‘val1 ‘

CHAR(6) の列は固定長なので ‘val1 ‘ のように最後尾に半角スペースに自動で付加されます。

では、以下のSQLではレコードが取得できるか確認してみます。

select
    *
from
    table1
where
    col1 = col2

結果は取得することができました。動き的には最後尾をtrimして比較しているようなイメージです。

続いて、以下の条件のレコードも検証してみます。

カラム名
col3varchar2(5)‘val1’
col4varchar2(8)‘val1 ‘

同じように以下のSQLで取得できるか確認します。


select
    *
from
    table1
where
    col3 = col4

VARCHAR2型の場合は、取得することができませんでした。同じ値とみなしてレコード取得するには trim や rtrim 関数を使う必要があります。

自分で入力したんだから、そりゃちがうもんでしょ!ってオラクルに怒られているような気分です。


select
    *
from
    table1
where
    trim(col3) = trim(col4)

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *