物流・倉庫・WMS・プログラマ日記

物流・倉庫・WMS・プログラマ日記

在庫管理・倉庫管理を扱う事が多いプログラマの備忘録です。

【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同士の比較ルールが適用されます。

 

以上、解説でした。