SAP SQL Anywhere における LIKE 述語セマンティクスと空白埋めデータベース

この記事のオリジナルは、Glenn Paulley が sybase.com に 2009 年 8 月に掲載したものです。その中で、Glenn は SQL Anywhere における空白埋め文字列と、それらが LIKE 述語に関してどのように動作するのか解説しています。

 

 

標準 SQL:2008 では、固定長文字列の値は、空白埋めされます。空白埋めは、オリジナルのサイズが、宣言されたカラムの幅よりも少ない場合、固定長文字列値の格納時に起こります。また、空白埋めは、固定長文字列が文字列比較述語を使用して比較される場合にも起こります。

ディスクへの格納について、カラム T  V 値の格納の動作を定義するセクション 2 (ストアの割り当て) のゼネラルルール 2 (b) (iii) からの関連部分を ISO 文書より以下に引用します。

 

もし、宣言された T の型が固定長文字列で、数値 L が長さで、V の文字長 M  L よりも少ない場合、T の先頭 M 文字は、V に設定され、それ以降 L 文字目まではスペースに設定されます。

 

しかしながら、SQL Anywhere は固定長文字列を空白埋めしません。SQL Anywhere データベースでは、全ての文字列はカラムが VARCHAR であるかのように格納されます。これは、文字列値内の全ての空白が、重要な文字として扱われることを意味しています。そのため、値 ‘a ‘ (次が空白の文字 ‘a’ ) は、単一の文字列 ‘a’ とイコールにはなりません。不等の比較も空白を照合の中の他の文字として扱います。

SQL Anywhere では、ANSI SQL 文字列比較動作を模倣する機能を「空白埋め」オプションで提供しており、dbinit ユーティリティまたはCREATE DATABASE 文で設定することが可能です。空白埋めオプションを有効にすると、文字列内の後端空白は、比較された場合無視されます。後端空白を無視するのは、同等と不等(“!=”)のオペレーションにおいて空白埋めと同一のセマンティクスを持ちます。しかしながら、この動作は、より少ない (“<“) のような他の比較オペレーションのための空白埋め動作では同一ではありません。

 

続きはこちら:SAP SQL Anywhere における LIKE 述語セマンティクスと空白埋めデータベース

 

SAPのSAP SQL Anywhere製品ページはこちら