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

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

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

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

Q&A

解決済

2回答

234閲覧

テーブル定義から得たデータ型がboolean型の場合にCASE文をExcel上で表現したい

KFC03724

総合スコア9

SQL

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

0グッド

1クリップ

投稿2025/04/19 18:04

編集2025/04/19 18:21

実現したいこと

初めて質問をさせていただきます。
現在DBから得たメタ情報から特定のテーブルのカラム名とデータ型を取り出してExcel上に展開の上、そのカラムのデータ型に応じてExcelの関数を用いてSELECT文を構築する事を試みております。
この時、データ型がbooleanであれば値の文字列't'を'true'に、'f'であれば'false'に置換するCASE文を生成したく考えています。VBAには頼らず計算式のみで進めたく考えております。
目標は以下2パターンの何れかの様なCASE文が現れる事です
1.CASE mno WHEN 't' THEN 'true' WHEN 'f' THEN 'false' ELSE mno END
2.CASE WHEN mno = 't' THEN 'true' WHEN mno = 'f' THEN 'false' ELSE mno END

発生している問題・分からないこと

他のデータ型の場合は問題がみられないのですが'true'、'false'値が絡んでくるboolean型の場合のみ
上手くCASE文が組み立てられず必ずFALSE表示となります。本来であればSQLのCASE文が現れてほしかった処です。
同様の経験の有る方がいらっしゃいましたらご助言の程宜しくお願いいたします。
イメージ説明

該当のソースコード

セルA7にカラム名"mno"、セルB7(状況を判りやすくお伝えする為)に値"t"、セルC7にデータ型booleanが記入されている時にセルD6に以下計算式を記述 =" "&IF(C7="boolean","CASE WHEN "&B7&" = 't' THEN 'true' CASE "&B7&" = 'f' THEN 'false' ELSE '"&B7&" END")

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

TEXT()関数も用いましたがやり様が良く無かったのか結果変わらずです。

補足

特になし

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

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

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

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

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

sazi

2025/04/20 07:58

DBMSは何ですか?Postgres?
KFC03724

2025/04/20 09:08

対象はAmazon Redshiftになります。YT0014様の回答にて解決できました。有り難うございました。
sazi

2025/04/21 02:00

Amazon Redshifはサービス名でDBMSは複数から選択可能です。 回答した内容で問題無いようなら、Postgresって事でしょうか。
KFC03724

2025/04/21 02:07

資料を厳密に確認しないと正確な事をお答えが難しいのですがPostgreでご認識の通りかと思われます。
guest

回答2

0

ベストアンサー

C7が boolean でなく、boolen (aが抜けている)になっています。
その結果、IF文が成立せず、ご希望の文字列になっていないのだと思われます。

投稿2025/04/20 08:22

編集2025/04/20 08:23
YT0014

総合スコア1818

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

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

KFC03724

2025/04/20 09:09

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。 切羽詰まって考え事をするとケアレスミスが出てしかも気づけませんね。 ご指摘を本当に有り難うございました。
guest

0

't'や'f'は文字列であり、boolen型との比較については暗黙の型変換が行われずに、結果的にelseが選択されているようにも思いますが、結果をみるとそうではないようですし・・・

DBMSがPostgresという事であれば、単に型変換するだけで文字列表記で返却されます

SQL

1mno::text

上記での返却が望む形式でない場合は型を明示してはどうでしょうか?

SQL

1CASE 2 WHEN mno = 't'::boolean THEN 'true' 3 WHEN mno = 'f'::boolean THEN 'false' 4 ELSE mno 5END

Nullが無い場合なら上記を以下の様にシンプルに記述できます

SQL

1case when mno then 'true' else 'false' end

投稿2025/04/20 08:08

sazi

総合スコア25426

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

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

KFC03724

2025/04/20 09:09

回答ありがとうございます。 ベストアンサーは別の方を選ばせていただきましたが、こちらの回答も非常に参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問