質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

2280閲覧

ビット列を文字列としてとりだしたい。 postgeeSQL

FfJab

総合スコア17

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/01/18 07:41

タイトルにありますようにテーブル内のビット列を文字列として取り出す方法が調べてもいまいちわかりません。
教えていただきたいです。

bit(1024)のデータを文字列型としてとりだしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2017/01/18 07:43

「文字列として取り出す」というのは具体的にはどのような形で取り出すという事ですか?1024ビットのデータを、1024文字の"0" or "1”にする事ですか?
FfJab

2017/01/18 08:37

すみません。説明不足でした。おっしゃる通り0,1だけの1024文字の文字列型にしたいです。
guest

回答2

0

テーブルにはビット列(bit(1024))として入っていますから、select文で取り出した値はビット列になります。
select文で、ビット列を0と1から構成される文字列に変換した状態で取り出す事はできませんので、ビット列として取り出して、それを0と1からなる文字列に変換します。

ビット列の特定のビットの値を取り出すには、get_bit関数を使います。
get_bitは、1つ目の引数にbit列の値、2つ目の引数にオフセット(先頭から何ビット目を取り出すか)を指定します。先頭のビットのオフセットは 0 です。

例えば変数 a にbit(1024)の値が入っているとすると、その123ビット目は、get_bit(a,122) で得られます。(先頭のオフセットが0なので、123ビット目のオフセットは122になります)
get_bitの返り値の型はintegerで、値は0か1です。

この関数を使ってビット列の値を順に取り出し、0なら"0"、1なら"1"を結果を入れる文字列変数に追加していけば、求めている文字列になります。

ビット列を0と1から構成される文字列に変換するコードは、以下のような感じです。
変数 a には、前もって bit(1024)の値が入っているものとします。

result="" /* 0,1の文字列に変換した結果を入れる変数です。最初は空です */ For i in 0..1023 Loop /* ビットの位置(オフセット) i がループ変数。範囲は0から1023 (先頭ビットから1024ビット目まで)*/ if get_bit(a,i)=1 { result = result || "1" } /* ビットの値が1なら、"1"を付け加えます */ else { result = result || "0" } /* ビットの値が0なら、"0"を付け加えます */ End Loop

投稿2017/01/20 07:05

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FfJab

2017/01/21 08:39

回答ありがとうございます!
guest

0

ベストアンサー

varchar型にキャストしていけませんか?

SQL

1SELECT 2 CAST(bit_col AS varchar(1024)) AS bit_char 3FROM 4 tbl

投稿2017/01/18 12:29

Panzer_vor

総合スコア1636

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FfJab

2017/01/21 08:39

あっさり取り出せました。。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問