• 締切済み

データ型について教えてください。

データ型について教えてください。 あまり気にする必要がないかもしれませんが、テーブルにフラグ目的でフィールドを作る場合、 データ型は何するのが一般的なのでしょうか?(CHAR OR NUMBER?) ACCESSで言えばBOOLEANになると思うのですが、ORACLEやポスグレはないですよね? 私は、CHAR(1)にしています。 理由は、プログラムでSQLを書くときに''で囲むようにするためです。 その他のフィールドもだいたいテキストか日付ですので、''を囲むフィールドばかりです。 できるだけ''囲むフィールドに統一して、SQLの記述ミスを少なくしようというのが狙いです。 この考え方は間違っていますか?

  • Oracle
  • 回答数2
  • ありがとう数6

みんなの回答

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.2

間違っていないと思います。 でも、私は、NUMBER 型を使います。 理由は、プログラムを書くときに、明示的にフラグだと解るようにしたいからです。 フラグとしての使い方を考えると、 プログラム上では、単体で動作する事が多くなってきます。 例えば、データを論理削除する場合に、削除フラグとして利用します。 その時には、SELECT の時には、WHERE の一部として入力されて利用されます。 UPDATE では、他のデータと同時にってよりも、削除フラグだけを設定する事が考えられます。 その為に、他のデータと記述上で見分けが付くように、しておきたい為です。 また、入れるデータも プログラム言語上で利用する True や False を使って明示的に解るようにしたい為です。 この辺りは、何が合っていて、何が間違っているって言うのは少ないと思います。 ルールをしっかりして、混合する様なルールになっていなければ、正解だと思います。

  • t_ohta
  • ベストアンサー率38% (5061/13227)
回答No.1

PostgreSQLにもboolean型がありますよ。 でも、わたしもchar型を使うことが多いですね。 複数のRDBMSをプロジェクトによって使い分けるので、どのRDBMSでも共通で使える型を使用します。 理由は、その方が間違えが少ないですし、移植する時に修正が少なくなるからです。

mori1115
質問者

補足

postgresにあるんですか。 運用上統一すべきなのですが、、 弊社にはoracleとpostgresがあり、両者で同じテーブルがあるため、データの移植、移行をよく行っています。そう考えると、postgresでboolean使うべきではないですね。

関連するQ&A

  • Oracle SQLにて固定長でデータをselectする方法

    Oracle SQL超初心者の者です。 Oracle SQLで固定長を指定してデータをselectすることを考えているのですが、僕がやりたいことが見当たらず質問に至りました。 例えば、Field1はchar型で(10)で定義されているとします。このField1を固定長の(20)でselectしたいのです。 (空き領域は半角0を入力) また、Field1には「ヤマダ タロウ」や「ヤマノウチ ケンジロウ」のように、固定長のデータが格納されていません。 このようなことがOracle SQLで実現可能であれば是非とも教えていただきたいです。

  • [MS Access]クエリで変換 hhmm(数値型)⇒hh:mm(日付/時刻型)

    テーブル上で”930”や”1030”というように数値型になっているデータを、 クエリ上では”9:30”や”10:30”の日付/時刻型へ変換したいと考えております。 この場合、どのようなSQL文で記述をすればよろしいでしょうか? テーブルやフィールは下記のようになっております。 ■テーブル名 tbl_サンプルテーブル ■フィールド名 ID(オートナンバー型) 時刻(日付/時刻型)

  • 重複の抽出

    カレンダーのようなものを作ってスケジュールの管理をしたいと思い、 start_at datetime end_at datetime sunday boolean monday boolean tuesday boolean ... のように予定の開始・終了時間と、定期的な予定用に曜日のフラグを立てるためのフィールドを用意しました。 データ作成時にすでに登録してある予定と被っているものを抽出したいのですが、 たとえば 毎週月・水・木曜 10:00~12:00 のデータが登録してあり、 1/4 14:00 ~ 1/10 10:00 みたいなデータを新たに登録しようとした場合にどういう風にSQLを書けばいいのかがよくわかりません。 日付から曜日を割り出して、たとえば0なら日曜のフラグがたっているものを抽出するみたいなSQLをかけるのでしょうか? できれば1回のSQLでできればいいのですが…… 聞きたいことがうまく伝わらないかもしれずもうしわけないです。 よろしくお願いします。

  • 【SQL】日付の取得(ある日付を省いて指定日数を取得したい)

    Aテーブルの日付フィールドを見て、引数の日付から過去7日間のデータを取得したいのですが、 その際に Bテーブルの日付と取得不可フラグを参照し、取得しようとしている日付(引数から過去7日間)に取得不可フラグ=1がたっていれば、Aテーブルの日付7日間のカウントに含めない としたいのですが、その判断を1回のSQLで取得することは可能でしょうか。 MINUSを使用しようとしましたが上手くいきませんでした。 お手数ですが、ご回答いただけますでしょうか。 宜しくお願いします。

  • 【SQL】1つのレコード内にある複数のデータの集計

    1つのテーブルの1つのレコード内に、以下のような複数のBooleanデータがあって、trueがいくつあるかを数えたいのですが、1つのSQLで記述できるでしょうか? ID data1 data2 data3 data4 ... 1  true  false  true  false ...

  • Oracleのデータ型、NUMBERについて

    Oracleのデータ型のNUMBERは、 NUMBER(総桁数,小数部の桁数)とするとあるのですが、 テーブルの構成をみると(desc テーブル名で確認した)、 総桁数等を指定していない(NUMBERだけ)のものもあるのですが、 指定しないと総桁数はいくつになるのですか? NUMBER型のフィールドを作成しようとしているのですが、 おおよその桁数はわかるのですが、もし越えたらと思うと、 総桁数を指定しない方がいいなかなと考えたりしています。 教えて下さい。

  • 計算式とリレーションによるcountについて

    ファイルメーカーに詳しい方教えて下さい。 【環境】 win7 FM11 PRO ADV 【質問】 「集計用テーブル」 フィールド内容 (1)フィールドA(2)集計開始(グローバル・日付)(3)集計終了(グローバル・日付)(4)済フラグ(テキスト) (5)済集計用(計算) データ内容 (1)フィールドA(データ1)(2)特定期間開始日(3)特定期間終了日(4)済 (1)フィールドA(データ2)(2)特定期間開始日(3)特定期間終了日(4)済 (1)フィールドA(データ3)(2)特定期間開始日(3)特定期間終了日(4)済 「日付別フィールド」 フィールド内容 (1)日付(日付)(2)フィールドA(3)完了フラグ(テキスト) データ内容 (1)日付(2)フィールドA(データ1)(3)済 ・ ・ ・ 上記にて、特定の日付間(グローバルフィールド)によるフィールドA(データ1・データ2・データ3とありますがデータ1~3全体に関する集計)に関する「済」のcountを行なっており、リレーションにて下記のように設定しております。 日付>=集計開始 日付<=集計終了 完了フラグ=済フラグ この状態で、集計用テーブルの(5)済集計用(計算)=count(日付別フィールド::完了フラグ)を実行するときちんと、countしてくれるのですが、現在この完了フラグを手入力にて「済」と入力しています。この完了フラグを計算式(if(〇〇フィールド="XX";"済";"")と〇〇フィールドの条件により【済】or「空白」が入るような設定に変えた途端「集計用テーブル」(5)済集計用(計算)フィールドのデータが「?」と表示されるようになりました。特にリレーション等はいじった形跡もなくデータもきっちり「済」と入力されているのですが(ifによる計算結果により)、何が問題なのでしょうか? 初めての投稿になり、説明不足の点があるかとは思いますが、よろしくお願いします。 以下のようなテーブル・フィールド間にて

  • ACCESS2007 重複について

    ACCESS2007を使用してます。 下記のように、IDコードのフィールドがあり、このコードに対して、重複しているデータ全てにフラグ1をたてたいのです。 <現在のテーブル> IDコード  ――――――+ 12345  12345  12378  12378  23457  23489  23456  <作成したいテーブル> IDコード 重複フラグ ――――――+――――――――+ 12345 1 12345 1 12378 1 12378 1 23457  23489  23456  重複フラグのフィールドは、現在のテーブルにありません。 どのようなクエリやSQLを作成すればいいでしょうか? よろしくお願い致します。

  • 1個のSQL分で2種類以上の件数値を取得する

    SQL分の記述で質問なんですが、 データベース上に日付、時間、フラグと言う項目があります。 同一の日付、時間のものは数件ずつあります。 フラグは"b"と"1"があります。 このデータの日付・時間辺りの件数と+フラグが"1"の件数を同時に取得するSQL分はかけますでしょうか? 別々ならば、 SELECT DATE,TIME,COUNT(*) AS KENSU1 FROM W_TABLE GROUP BY DATE,TIME ORDER BY DATE,TIME と SELECT DATE,TIME,COUNT(*) AS KENSU2 FROM W_TABLE WHERE FLG="1" GROUP BY DATE,TIME ORDER BY DATE,TIME でかけると思うのですが、 1個のSQL分で記述は可能でしょうか? 処理結果を 05/02/23 12:00 10 5 05/02/24 10:00 12 3 (日付・時間・件数・フラグ="1"の件数  見たいに取得したいのですが..

  • 3つ以上のテーブルの結合に関して

    いろいろな書籍を見ながら試してみましたが どうも求めている結果が得られませんでした… ヒントでも構いませんのでアドバイスお願いします。 テーブルの仕様 ■テーブル1■ 店舗コード 日付 フィールド1n フィールド2n フィールド3n フィールド4n ■テーブル2■ 店舗コード 日付 フィールド5 ■テーブル3■ 店舗コード 日付 フィールド6 2つのテーブルの内部結合や外部結合のSQL文は確認できましたが 3つ以上の記述がテキストにありませんでした。 ※もしかしたら2つのテーブルを結合してからかと思いましたが 具体的な方法が思い浮かびませんでした。 オラクルは9g SQL*PLUS ■その他の条件■ すべてのフィールドが例えNULLでも店舗コードと日付 は表示されるようにする。 INを使用して抽出したい店舗コードのみを表示させたい。 (その場合並び替え順を指定したい場合はINのあとで順番を指定すれば よろしいでしょうか?) フィールド1~4までの「n」は同じ種類のフィールドですが区分が10ずつ あり算術演算子で合計を求めた値のみを表示させます。 そのためASを使用してフィールド名を短くしたいと考えています。 店舗コードと日付は3つのテーブルに共通してありますが 結合した場合は1つづつの表示にしたいです。 大変申し訳ございませんが 宜しくお願いします。