バイナリ・リテラルは、0 ~ 9 の数字、大文字と小文字の A ~ F で構成される 16 進文字です。バイナリ・データをリテラルとして入力する場合は、データの前に 0x (1 つのゼロと 1 つの後続文字) を指定します。このプレフィクスの右側には、偶数の桁数を指定します。たとえば、39 の 16 進数は 0027 であるため、0x0027 のように表されます。
0x12345678 の形式の 16 進定数は、バイナリ文字列として処理されます。0x の後ろに桁数を無制限に追加できます。
バイナリ・リテラルは、バイナリ定数とも呼ばれます。SQL Anywhere では、バイナリ・リテラルをおすすめします。
CAST、CONVERT、HEXTOINT、INTTOHEX 関数を使用すると、バイナリ文字列を整数に変換できます。CAST 関数と CONVERT 関数は、16 進定数を TINYINT、符号付きと符号なしの 32 ビット整数、符号付きと符号なしの 64 ビット整数、NUMERIC などに変換します。HEXTOINT 関数は、16 進定数を符号付き 32 ビット整数にのみ変換します。
CAST 関数によって返される値が 8 桁を超えることはできません。8 桁を超える値では、エラーが返されます。8 桁未満の値の左側に 0 が追加されます。たとえば、次の引数は値 -2,147,483,647 を返します。
SELECT CAST ( 0x0080000001 AS INT ); |
次の引数はエラーを返します。これは、符号付き 32 ビット整数として 10 桁の値を表現できないためです。
SELECT CAST ( 0xff80000001 AS INT ); |
符号付き 32 ビット整数として値を表現できる場合、HEXTOINT 関数によって返される値は 8 桁を超えることができます。HEXTOINT 関数は、数値、大文字または小文字の A ~ F のみで構成される文字列リテラルまたは変数を受け入れます (0x プレフィクスが付いている場合、付いていない場合の両方)。16 進値の右から 8 桁目が数 8 ~ 9 か大文字または小文字の A ~ F であるか、その前の桁がすべて大文字または小文字の F の場合、その 16 進値は負の整数値になります。
次の引数は、値 -2,147,483,647 を返します。
SELECT HEXTOINT( '0xFF80000001' ); |
SELECT HEXTOINT( '0x80000001' ); |
SELECT HEXTOINT ( '0xFFFFFFFFFFFFFFFF80000001' ); |
次の引数はエラーを返します。これは、引数が符号付き 32 ビット整数として表現できない正の整数値を表しているためです。
SELECT HEXTOINT( '0x0080000001' ); |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |