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

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

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

【SQLを丁寧に理解する】CHARとVARCHAR2【ORACLEの場合】PART3

こんにちは、EightyEightRiceです。

 

今日の記事は、【SQLを丁寧に理解する】CHARとVARCHAR【ORACLE】PART3です。

データベースを扱い場合に、よくハマってしまう項目について、丁寧に説明していきます。

ざっと読み飛ばすだけでも、

「へぇーそうなんだ」

と、思っていただけるような構成を心がけています。

 

今回は

 

CHARとVARCHAR2【ORACLEの場合】PART3

 

です。

 

前回で

・NULL

・空文字

 の解説をしました。これを踏まえた上で、今回は

・TRIM

の解説をして、「NULL」「空文字」との関係を掴んでいければ、

と思います。

 

「TRIM」は、SQLやPLSQLにおいて、標準で定義されている関数です。

SQLやPLSQL以外でも標準関数として定義している言語も多いです。

 

どんな処理を行う関数かと、

「引数で与えられた文字列に対し、

前後の半角スペース・全角スペースを取り除いたものを戻り値として返す」

関数です。

具体的な例として、

・TRIM('ABC   ')        => 'ABC'

・TRIM('   ABC')        => 'ABC'

・TRIM('   ABC  ') => 'ABC'

・TRIM('ABC')           => 'ABC'

となります。

基本的な考え方としては、上記のルールは分かればOKです。

 

ここで前回のSQLの等式と絡めて、初心者がつまずく点を解説しておきます。

 

以下の場合、戻り値はどうなるでしょうか。

・TRIM('   ') => ??

 

直観的には、「''」になりそうですね。

しかし、実際には前回解説しましたが、ORACLEに空文字「''」は無く、

すべてNULLになります。

 

つまり、

・TRIM('   ') => NULL

が正解です。

 

ここで、次のSQLの等式を考えてみましょう。

・TRIM('   ') = TRIM('   ')

 この等式の結果は、TRUEでしょうか、FALSEしょうか。

 左辺右辺がまったく同じ値なので、TRUEになりそうですね。

しかし、正解はFALSEです。

 

なぜかというと、先ほど解説しましたが、

・TRIM('    ')

は、NULLになります。

ORACLEでは空文字('')はすべてNULLだからですね。

したがって、

上記等式は、

・TRIM('    ') = TRIM('    ') ➡ '' = '' ➡ NULL = NULL

つまり、FALSEとなります。

 「NULL = NULL」がFALSEになる理由は前回解説していますので、

気になる方はチェックしてみてください。

 

以上、解説でした。