BIT
と BIT VARYING
データ型が外されました。BIT_LENGTH()
関数を含め、これらを正式にサポートしていたのは、SQL:1999 までです。標準 SQL:2003 では、TRUE や FALSE といった真理値用に BOOLEAN
型が維持されています。BIT VARYING
型がなくなったとはいえ、SQL Anywhere では、version 10 以降でBIT VARYING
型をサポートしています。BIT VARYING
用の追加のショートハンドのVARBIT
とともに以下の型の宣言がビット文字列配列用にサポートされています。BIT VARYING [ ( length ) ]
LONG BIT VARYING
LONG BIT VARYING
カラムは、最長 2GB の BLOB で構成されています。BIT
型は、標準 SQL の BOOLEAN
型のシノニムとして使用することが可能です。BIT VARYING
とLONG BIT VARYING
型は、以下のスカラ関数を使用して操作することが可能です。BIT_LENGTH()
- ビット文字列の長さを返します。この関数は、文字列のビット数を返すSQL:1992 からの BIT_LENGTH() 関数と同じセマンティクスは持っていないことに留意してください。そのため、以下のクエリでは、SELECT BIT_LENGTH( '01101011' );
BIT_LENGTH()
のセマンティクスを使用する) 64 ではなく、(引用符内のこの string は、Binary String として翻訳される) 8 を返します。BIT_SUBSTR( bit-expression [, start [, length ] ] )
- ビット配列の部分文字列を返します。COUNT_SET_BITS( bit-expression )
- ビット配列の中の番号の '1' ビットを返します。GET_BIT( bit-expression, position )
- 配列内の特定のポジションのビットのビット値を返します。SET_BIT([ bit-expression, ]bit-position [, value ])
- 値に対するあるポジションの値を設定します。デフォルトの値は '0' です。SET_BIT()
は、修正されたビット文字列を含む LONG VARBIT
表現を返します。bit-expression が特定されていない場合には、ビット文字列は、デフォルトでは「ポジション」の長さの '0' ビットの string になります。BIT_AND( expression )
は、 複数の行からの継続的なビット配列値のビット単位のAND を実行する集合関数です。例えば、クエリSELECT BIT_AND( CAST(row_value AS VARBIT) )
FROM dbo.sa_split_list('0001,0111,0100,0011')
BIT_OR()
と BIT_XOR()
は、ビット単位の OR と XOR オペレーションをそれぞれ実行するBIT_AND()
に似ています。SET_BITS( integer-expression )
集合関数は、 VARBIT
配列とともにグループ内のそれぞれの行の表現の integer 値に相応してビットポジションの設定を '1' で返します。例として、以下の文では、2番目、5番目、10番目のビットのビット配列を、1 (または 0100100001) に設定して返します。CREATE TABLE T( x INTEGER );
INSERT INTO T values( 2 );
INSERT INTO T values( 5 );
INSERT INTO T values(10 );
SELECT SET_BITS( x ) FROM T;
BIT VARYING
へのコンバージョンにおいて、SQL Anywhere はできる限り直感的なコンバージョンを試みます。SQL Anywhere のマニュアルに詳細な説明がありますが、いくつかここに例を挙げます。INTEGER
から BIT VARYING
: integer をビット配列にコンバートする場合、ビット配列の長さは、integer 型のビットの長さです。そして、ビット配列の値は、integerのバイナリを表します。Integer の最も重要なビットは、配列の最初のビットになります。SELECT CAST( CAST( 8 AS TINYINT ) AS VARBIT )
VARBIT(8)
を返します。BINARY
から BIT VARYING
: 長さ n の binary 型をビット配列にコンバートする場合、配列の長さは n * 8 ビットです。ビット配列の最初の 8 ビットは、バイナリ値の最初のバイトになります。バイナリ値の最も重要なビットは、配列の中の最初のビットになります。ビット配列の次の 8 ビット は、バイナリ値の 2 番目のバイトになります。以降も同様です。SELECT CAST( 0x8181 AS VARBIT )
VARBIT(16)
を返します。CHAR
または VARCHAR
から BIT VARYING
: 長さ n の character データ型をビット配列にコンバージョンする場合、配列の長さは n ビットです。それぞれの character は、'0' または '1' でなければならず、相応する配列のビットには、0 または 1 の値が割り当てられます。SELECT CAST( '001100' AS VARBIT )
VARBIT(6)
を返します。BIT VARYING
から INTEGER
: ビット配列 を integer データ型にコンバートする場合、ビット配列のバイナリ値は、最も重要なビットを最初に使用して、integer 型のストレージフォーマットに従って翻訳されます。SELECT CAST( CAST( '11000010' AS VARBIT ) AS INTEGER )
SET_BITS()
集合関数の dual は、ビット配列内のそれぞれのビット用に行を生成するシステムプロシージャー sa_get_bits()
で、(オプション的に、そしてデフォルトで) ビットポジションが ‘1’ であるものにだけ行を生成することができます。以下は、その値に関わらず、インプット表現の中のそれぞれのビットポジションのために行を生成する例です。You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
34 | |
17 | |
16 | |
15 | |
11 | |
9 | |
8 | |
8 | |
8 | |
7 |