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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PostgreSQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

2340閲覧

dbにbooleanで登録されているデータをintegerで取得したい

samazama4623

総合スコア59

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PostgreSQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2015/07/02 02:38

編集2022/01/12 10:55

Dbにbooleanである定期点検ごとの値が入っているとします。

sqlで取得したとき、trueだったらその定期点検の数字を取得したいのです。

3カ月点検 としたら、
3を取得したい

どのようにすればよいでしょうか

追記

lang

1select "3_month_inspection", 2 CASE "3_month_inspection" WHEN 't' THEN '3' 3 WHEN 'f' THEN '0' 4 END 5 from customer

上のsqlで数字を取得できると思いますが、
このほかに20個くらい _month_inspectionと _year_inspectionがあるのですが
上のsqlを個別に全て書くのはナンセンスだと思うので
何か短くできる方法はないでしょうか

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

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

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

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

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

sho_cs

2015/07/02 02:43

テーブル構成の追記をお願いします。
samazama4623

2015/07/02 03:06

"3_month_inspection" boolean NOT NULL DEFAULT false, "6_month_inspection" boolean NOT NULL DEFAULT false, "1_year_inspection" boolean NOT NULL DEFAULT false, "2_year_inspection" boolean NOT NULL DEFAULT false, "3_year_inspection" boolean NOT NULL DEFAULT false, "4_year_inspection" boolean NOT NULL DEFAULT false, "5_year_inspection" boolean NOT NULL DEFAULT false, "6_year_inspection" boolean NOT NULL DEFAULT false, "7_year_inspection" boolean NOT NULL DEFAULT false, "8_year_inspection" boolean NOT NULL DEFAULT false, "9_year_inspection" boolean NOT NULL DEFAULT false, "10_year_inspection" boolean NOT NULL DEFAULT false, "11_year_inspection" boolean NOT NULL DEFAULT false, "12_year_inspection" boolean NOT NULL DEFAULT false, "13_year_inspection" boolean NOT NULL DEFAULT false, "14_year_inspection" boolean NOT NULL DEFAULT false, "15_year_inspection" boolean NOT NULL DEFAULT false, "16_year_inspection" boolean NOT NULL DEFAULT false, "17_year_inspection" boolean NOT NULL DEFAULT false, "18_year_inspection" boolean NOT NULL DEFAULT false, "19_year_inspection" boolean NOT NULL DEFAULT false, "20_year_inspection" boolean NOT NULL DEFAULT false, "21_year_inspection" boolean NOT NULL DEFAULT false, "22_year_inspection" boolean NOT NULL DEFAULT false, "23_year_inspection" boolean NOT NULL DEFAULT false, "24_year_inspection" boolean NOT NULL DEFAULT false, "25_year_inspection" boolean NOT NULL DEFAULT false, "26_year_inspection" boolean NOT NULL DEFAULT false, "27_year_inspection" boolean NOT NULL DEFAULT false, "28_year_inspection" boolean NOT NULL DEFAULT false, "29_year_inspection" boolean NOT NULL DEFAULT false, "30_year_inspection" boolean NOT NULL DEFAULT false, "40_year_inspection" boolean NOT NULL DEFAULT false, "50_year_inspection" boolean NOT NULL DEFAULT false, "60_year_inspection" boolean NOT NULL DEFAULT false, "70_year_inspection" boolean NOT NULL DEFAULT false, "80_year_inspection" boolean NOT NULL DEFAULT false, "90_year_inspection" boolean NOT NULL DEFAULT false, "100_year_inspection" boolean NOT NULL DEFAULT false, です
guest

回答2

0

今回のようにデータが扱いにくかったり、点検時期の種類が増えたら列を追加しなければならないので定期点検毎に列を保つ構造はあまりよろしくないですね。

無理やりやるとするとinformation_schemaから列名を取得し、行列入れ替えを行って…

lang

1with colname AS (select 2 column_name,ordinal_position 3from 4 information_schema.columns 5where 6 table_name='test' 7order by 8 ordinal_position) 9 select id 10 , column_name 11 ,case when column_name like '%_inspection' then 12 case when v then '0' 13 else split_part(column_name,'_',1) end 14 else '' end 15 from (select id,generate_series(1, 39) AS seq , 16 unnest(ARRAY["3_month_inspection" 17 , "6_month_inspection" 18 , "1_year_inspection" 19 , "2_year_inspection" 20 , "3_year_inspection" 21 , "4_year_inspection" 22 , "5_year_inspection" 23 , "6_year_inspection" 24 , "7_year_inspection" 25 , "8_year_inspection" 26 , "9_year_inspection" 27 , "10_year_inspection" 28 , "11_year_inspection" 29 , "12_year_inspection" 30 , "13_year_inspection" 31 , "14_year_inspection" 32 , "15_year_inspection" 33 , "16_year_inspection" 34 , "17_year_inspection" 35 , "18_year_inspection" 36 , "19_year_inspection" 37 , "20_year_inspection" 38 , "21_year_inspection" 39 , "22_year_inspection" 40 , "23_year_inspection" 41 , "24_year_inspection" 42 , "25_year_inspection" 43 , "26_year_inspection" 44 , "27_year_inspection" 45 , "28_year_inspection" 46 , "29_year_inspection" 47 , "30_year_inspection" 48 , "40_year_inspection" 49 , "50_year_inspection" 50 , "60_year_inspection" 51 , "70_year_inspection" 52 , "80_year_inspection" 53 , "90_year_inspection" 54 , "100_year_inspection"]) AS v 55 FROM test) as t 56 left join colname cn on t.seq = cn.ordinal_position;

投稿2015/07/02 06:52

sho_cs

総合スコア3541

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

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

0

テーブル構造がわからないので、そのものズバリの回答はできないのですが、CASE式を使えば実現できそうですね。
以下のページを参考にしてみてください。
CASE式のススメ

投稿2015/07/02 03:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問