【SQLを丁寧に理解する】CHARとVARCHAR2【ORACLEの場合】PART5
こんにちは、EightyEightRiceです。
今日の記事は、【SQLを丁寧に理解する】CHARとVARCHAR【ORACLE】PART5です。
データベースを扱い場合に、よくハマってしまう項目について、丁寧に説明していきます。
ざっと読み飛ばすだけでも、
「へぇーそうなんだ」
と、思っていただけるような構成を心がけています。
今回は
CHARとVARCHAR2【ORACLEの場合】PART5
です。
前回はCHAR同士のSQLの等式での考え方を解説をしました。
今回は「VARCHAR2同士のSQLの等式」についてさらに深堀していこうと思います。
前回の「CHAR同士のSQLの等式」おさらいとして、
再度、CHAR同士の比較ルールを言葉でいうと、
「CHAR同士の比較は後ろの空白は無視して比較して良い」
という事になります。
つまり、以下はすべてTRUEなんですね。
・'A ' = 'A ' ➡ 'A ' = 'A '
・'ABC ' = 'ABC' ➡ 'ABC ' = 'ABC '
(右辺左辺ともにCHAR型としています。)'
今回は、VARCHAR2同士の比較です。
先に VARCHAR2同士の比較ルールを言葉でいうと、
「VARCHAR2同士の比較は後ろの空白は無視してはいけない」
となります。
VARCHAR2型の変数やカラムに値を格納する場合のルールを見てみましょう。
以下、以前の記事の引用です。
==============================
あるカラムの型が
VARCHAR2(5 BYTE)であった場合、
"A" → "A"
"あいう" → "あいう"
"A___" → "A___" (後ろの空白もそのまま)
と、そのまま登録されます。
見えやすく、「 _ 」を使いましたが、実際は半角スペースで埋められます。
==============================
これが、VARCHAR2の値の保持、データの持ち方のルールでした。
つまり、後ろの空白は、
”あえて意味を持たせて登録されている”
という事が読み取れますね。
<VARCHAR2型同士の比較ルール>
VARCHAR2型の変数やカラム同士を比較する場合は、
空白の有無に関わらず、保持している値同士を、そのまま比較する。
以下に、TRUEの場合とFALSEの場合のSQLの等式を示します。
(両辺がVARCHAR2とします。)
・'ABC' = 'ABC' (TRUE)
・'A ' = 'A ' (TRUE)
・'ABC ' = 'ABC' (FALSE)
・' ' = ' ' (FALSE)
ただし、CHAR同士の場合と同様に、
以下、FALSEになるので、注意が必要です。
・'' = '' ➡ NULL = NULL
最後に、CHARとVARCHAR2の比較ルールはどうでしょうか。
これは、VARCHAR2同士の比較ルールが適用されます。
以上、解説でした。