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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

Q&A

1回答

3425閲覧

[PostgreSQL] 文字列型で2進表現された値をビット型に変換する

shou3825

総合スコア6

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

0グッド

2クリップ

投稿2018/08/30 04:35

2進数表現された値をcharacter varying型でDBに保存しています。(binaryumber:22桁)
下記のようにSQLでbit型に変換したいのですがうまくいきません。

lang

1select 2 ('b' || binaryumber)::bit(22) as bit 3from 4 bit_table 5;

このSQLを実行すると以下のように「text型からbit型に変換できません」と
エラーが出てしまいます。
(character varying型なのになぜかtext型になってますが。。)

ERROR: cannot cast type text to bit LINE 11: ( 'b' || binaryumber)::bit(22) as bit ^ ********** エラー ********** ERROR: cannot cast type text to bit SQLステート:42846 文字:282

もし変換できる記述があるとすれば、どのように記述すればよいでしょうか。
ご助力の程よろしくお願いします。

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

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

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

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

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

fuzzball

2018/08/30 06:03

varbit(22)だとどうなりますか?
shou3825

2018/08/30 07:25

fuzzball様>> varbit(22)だと構文エラーになりました
fuzzball

2018/08/30 07:30

そうですか‥。こちらでは質問のようなエラーも出ないし、実行環境のせいですかね。
fuzzball

2018/08/30 07:51

ちなみに bit varying(22) でも同じでしょうか?
shou3825

2018/08/30 07:57

構文エラーは解消されましたが「character varying型からbit varying型に変換できません」とエラーが出てます
fuzzball

2018/08/30 08:01

私の環境では select binaryumber::varbit(22) as bit from bit_table; で動いてます。
shou3825

2018/08/30 08:07

fuzzball様>>なぜだ~。私の環境の問題でしょうか。。
guest

回答1

0

psql で実行してみました。postgreSQL 9.6 です。

sql

1xxx=# create table public.bit_table ( binaryumber character varying(64) not null ); 2CREATE TABLE 3xxx=# insert into bit_table (binaryumber) values('10011'); 4INSERT 0 1 5xxx=# select ('b' || binaryumber)::bit(22) as bit from bit_table; 6 bit 7------------------------ 8 1001100000000000000000 9(1)

実際に動かしたものをコピペしています。
型が text なのが問題なのかと text テーブルを create しても同様でした。

一度

sql

1select binaryumber from bit_table;

してみてください。 0 と 1 以外の文字が含まれていませんか?

投稿2018/08/30 06:12

編集2018/08/30 07:21
showkit

総合スコア1638

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

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

shou3825

2018/08/30 07:53 編集

2018/08/30 16:53 >> showkit様 先ほど、「select binaryumber from bit_table;」を実行してみましたが 表示された結果に見た目上は0 と 1以外の文字は含まれていないです。 ただ表示された結果の中から一つ選択しエディタにペーストしたものには ダブルクォーテーションが付いた「"0000000000000001000000"」となってました。 2018/08/30 16:39 >> showkit様、教えてくださりありがとうございます。 コマンドライン上でpsqlを操作できる環境にないので、純粋にSQLのみで失礼します。 text型にならないようにサブクエリ使ってcharacter varying型になるような以下のSQLを書いて実行してみましたが結果「character varying型からbit型に変換できません」となりました。 なにか指定の仕方が悪いのでしょうか。 ・・・SQL・・・ select tmp.a::bit(22) as bit from ( select cast('b'|| binaryumber as character varying) as a from bit_table )tmp ; ・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・・・・ ERROR: cannot cast type character varying to bit LINE 1: select a.tmp1::bit(22) as bit from ^ ********** エラー ********** ERROR: cannot cast type character varying to bit SQLステート:42846 文字:8 ・・・・・・・・・・・・・・・・・・・・・・・・
showkit

2018/08/30 08:31

見た目上見えないもので、例えば 全角スペースの文字があったりするので、データダンプ可能であればそれをお勧めします。 こちらで select ('b' || binaryumber as character varying) as bit from bit_table; にしたら ERROR: syntax error at or near "as" になっちゃいました。エラーの内容がちがいますね select ('b' || binaryumber) as bit from bit_table; は bit -------- b10011 (1 行) の結果になりました。
showkit

2018/08/30 08:31

ちなみに postgreSQL のバージョンは何ですか?
showkit

2018/08/30 08:36

さらに select '1010' as bit; の結果はどうなるでしょうか? こちらでは bit ------ 1010 (1 行) になります。
shou3825

2018/08/30 08:56 編集

showkit様 >> ありがとうございます。 バージョンは8.2です。 select '1010' as bitの結果はshowkit様と 同じ結果になってます。 bit ------ 1010 (1 行)
showkit

2018/08/30 10:35

とりあえず、バージョンは関係なさそうですね。手元に バージョン 8.4 があったので試してみましたが 9.6 とほぼ同じ動作になりました。
showkit

2018/08/30 23:24

コメントの fuzzball さんの方でも動作するようですね。 こうなると わたしには お手上げな感じです。 途中で 試験してもらった SQL も単なるシンボルの置き換えで、無駄な作業をさせてしまいましたね、申し訳ありません。
shou3825

2018/08/31 00:50

showkitさん、ありがとうございます。 まだ、データダンプしてSQL実行してないので試してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問