• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:数日経過した後にNULLに変換する処理は???)

SQLで数日経過したデータをNULLに変換する処理とは?

このQ&Aのポイント
  • SQLでテーブルのある項目に入っている日付がSYSDATEから数日経過した場合、NULLに変換する処理をしたいです。具体的には、SYSDATEから7日以上経過したデータをNULLにしたいと考えています。また、処理の中で土曜日と日曜日を考慮する必要もあります。
  • このような処理は単純なSQL文だけでは実現できません。土曜日だった場合には9日経過するまでデータをNULLにせず、日曜日だった場合には8日経過するまでデータをNULLにしないような処理を追加する必要があります。
  • また、企業の休み(お盆、正月、祝日など)を考慮する場合には、休みのデータを持ったテーブルを作成する方が効率的です。ただし、SQL単文でも休みを考慮することは可能ですが、処理が煩雑になる可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

UPDATE テーブル SET 日付 = NULL WHERE 日付 = TRUNC(SYSDATE) - CASE TO_C HAR(日付, 'DAY') WHEN '土曜日' THEN 9 WHEN '日曜日' THEN 8 ELSE 7 END かな? > あと余談ですが・・・例えば企業の休み > (お盆、正月、もしくは祝日など)を考慮 > したい場合、休みのデータを持ったテー > ブルを作るほうが無難ですか?それと > もSQL単文でも可能でしょうか?(長い > 文かつ効率が悪くても・・・) 普通は全日を持ったカレンダーマスタを持つかな。

mr-r00
質問者

お礼

ありがとうございました。 大変参考になる意見ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.1

>あと余談ですが・・・例えば企業の休み(お盆、正月、もしくは祝日など)を考慮したい場合、 >休みのデータを持ったテーブルを作るほうが無難ですか? 休みではなく、営業日のデータを持つのが正解です。 対象日と今日の間のレコード数を数えるのならSQL一発でできますよ。

mr-r00
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SQLで特定データがNULLなら別データを引用?

    SQL文で“ある箇所のデータがNULLだったら指定した場所からデータを引用する”ということをしたいのですがどのように記述すれば良いのでしょうか? 画像にあるようなテーブル構成だと仮定します。 やりたいこととして select A.XA, A.YA, A.ZA + M.M2, B.XB, B.YB B.ZB from A, B, M where A.XA = B.XB and A.YA = B.YB and B.ZB = M.M1 ; というような書き方です。 ちなみにM2のデータ型は「Interval Day?」とかいうような型らしい?です。名前忘れましたが・・・ このイラストから見るとマスターテーブルの“F5”のM2データがNULLです。 NULLデータは日付の加算ができなくなるので・・・対処したいのです。 このSQL文に加える処理として、 「もし、マスターテーブルのF5がNULLの場合のみG6のM2を参照する」 という構文を追加したいのですが・・・ そのような記述はSQL内で可能なのでしょうか?

  • 「C#」SQL実行でのNULL値の処理方法

    質問は下記のとおりです。よろしくお願いいたします。 SqlCommand s_h1 = new SqlCommand("select sum(人数) from データ where 日付 >= '2008-04-01 00:00:00' and 日付 <= '2008-04-30 23:59:59', con); int h1 = (int)s_h1.ExecuteScalar(); で実行すると「指定されたキャストは有効ではありません。」とエラーが出ます。SQLで実行するとデータが無いため、値は「NULL」となっているのでintにキャストが出来ないというのは理解しました。 出来れば「NULL」の場合は「0」という数字にしたいのですが、この処理方法をご教授お願いいたします。

  • テーブルの行を増やしたい・・・。

    テーブルの行を増やし、 データを一年文作成したいのですが・・・。 CREATE TABLE CALENDAR_TBL( YYYYMMDD DATE NOT NULL, DayData NUMBER(3) NULL CONSTRAINT CALENDAR_TBL_PKEY PRIMARY KEY(YYYYMMDD)); このテーブルに、2005年のデータ365レコードを挿入したいのですが、 1つのINSERT文(SQL)で、できますでしょうか? (※PL/SQLは除きます。) ※不可能であれば、SELECT文(下記のように)を一年分用意してUNIONで作成するのですが、 これ以外に簡単にできないでしょうか? INSERT INTO CALENDAR_TBL ( (SELECT SYSDATE + 000, DayData FROM CALENDAR_TBL) UNION (SELECT SYSDATE + 001, DayData FROM CALENDAR_TBL) UNION (SELECT SYSDATE + 002, DayData FROM CALENDAR_TBL) UNION (SELECT SYSDATE + 003, DayData FROM CALENDAR_TBL) ・・・(省略)・・・ UNION (SELECT SYSDATE + 365, DayData FROM CALENDAR_TBL) )

  • null→数値にするには?

    何度も質問してすみません。 NULLが格納されているフィールドに 「0」や「1」といった値を入れる為には どういうINSERT INTO文をPHP内で記述すれば宜しいでしょうか? pg_field_is_nullを使ってみたのですが イマイチ値を変更する事ができません。 また、SQL文で「NOT NULL制約」という言葉があるのを知ったのですが、 ALTER TABLE文でテーブルを作る時に、 各フィールドにはnullではなく、「0」を最初から格納したい場合は どういった記述をすれば宜しいでしょうか? 宜しくお願い致します。

  • 副問い合わせでのNULLの抽出方法

    SQLについての質問です。 副問い合わせを使用したとき、NULLのデータも含めて抽出したいの ですが、どうもうまくいきません。 やりたいことを説明すると、まず以下の構造のテーブルがあります テーブル    コード 金額  -------------- 01  |100   01  |110   02  |090   02  |080   03  |200   04  |100   04  |150   05  |400   09  |350   null |100   null |200   集約後データ コード -------- 01  |<--- 1件目 02  |<--- 2件目 03  |<--- 3件目 04  |<--- 4件目 05  |<--- 5件目 09  |<--- 6件目 null |<--- 7件目 まず、テーブルをコードで集約します。集約された結果のデータで上位○件と いう制御をかけたい為、ROWNUMを使用しています。 ただ、実際にほしいデータは集約する前のデータの為、一度集約とROWNUMを使って 絞りこんだデータを副問い合わせしています。 但し、このときNULLが入ったコードも取得する必要があります。 現在のSQLはこんな感じです。 SELECT コード、SUM(金額) FROM テーブル WHERE コード IN ( SELECT コード FROM テーブル WHERE ROWNUM <= 10 GROUP BY コード ) GROUP BY コード このSQLだと、NULLが省かれてしまうため上位6件までしか抽出できません。 実際、NULLを含んだデータを副問い合わせで取得することは可能でしょうか? データベースはオラクル9iです。 宜しくお願いします。

  • SQLでCSVを出力する際のNULLをどうにかしたい

    いつもお世話になっております。 SQL(2005)でクエリ文を書いて、その結果をCSV保存する際、NULLの部分が空白ではなく「NULL」と出力されてしまいます。 今まではSQL(2000)で処理しており、その時はNULLはちゃんと空白になっていたのですが、SQL(2005)でも同様にNULLを空白にして出力する方法は無いでしょうか? なお、クエリ文で変換する方法は知っていますが、SQL(2000)の頃のクエリ文を全て直すのは骨なので、出来ればSQL(2005)の設定の方で何とかできればと考えています。 新しいDBとなり、戸惑っておりますので、皆様のお知恵を拝借いたしたく、よろしくお願い致します。

  • insert時に日付のフィールドにnullを入れたい

    テーブルに以下のフィールドがあります。 [No],[区分],[キーNo],[日付] このテーブルに日付のデータのない、以下のようなデータをインサートしたいのですが、 [No],[区分],[キーNo] 1 ,kbn1 , key1 strSQL1 = "INSERT INTO テーブル1" & " ([No],[区分],[キーNo],[日付])" _ & " VALUES ("1","kbn1","key1",NULL )" とするとエラーが出てしまいます。日付フィールドに何も入れないようにinsert文を書くにはどうしたらよいでしょうか。 すみません、アドバイス等宜しくお願いします。

  • SQL UPDATE 文 GroupByの値を更新したい

    SQLの UPDATE文について質問させていただきます。 テーブル内のデータを日付と時間で GroupBy して カウント求めています。 求めた値(カウント)を、日付をキーにして同じテーブル内のフィールドに更新するSQLを作成したいと考えています。 GroupByして、カウントを求めることはできるのですが、 どうしても、UPDATE文を実行させることができません。 この処理は、SQLで行うことはできるのでしょうか? 下記に、UPDATE前と後のテーブルデータを記載しています。 日付   時刻 20090101 0:00  20090101 0:00 20090102 0:00 20090102 0:00 20090102 1:00 20090103 2:00 ↓ 日付   時刻 カウント 20090101 0:00 2 20090101 0:00 2 20090102 0:00 2 20090102 0:00 2 20090102 1:00 1 20090103 2:00 1 よろしくお願いいたします。

  • Oracleのnull

    ちょっとオラクルの検索文で困ったことがでてきました。 temp ------- col1 col2 col3 と言うようなテーブルがあります。 select col1 || '(' || col2 || ')' as col from temp; というような検索文を作成しましたが、テーブルのcol1とcol2が両方とも nullのデータは'()'となってしまいます。 col1とcol2は片方だけがnullと言うことはありません。 col1がnullの場合はcol2もnullです。 このような場合col1とcol2がnullの時は、結果のcolもnullにしたいのですが どうしたら出来るのでしょうか? また、無理なら無理と教えてください。 よろしくお願いします。

  • NULLを認識させる方法

    Access2000を使用しています。 SQL文について質問です。 AとBの、内容が似たテーブル (フィールド項目は全く同じで入力内容が若干違います) それぞれの'数量'というフィールドを比べ、 内容が一致する件数を出力したいというのが目的です。 方法としてはCOUNTを使用し、 (A.数量)(B.数量)を結合&比較して一致しないレコードが NULL意外のものを件数に数えるようにしたいのです。 しかしIS NULLやIS NOT NULLを使うとTRUEかFALSEが 渡ってしまいます。 そこで質問なのですが、 COUNTを使って、 データが一致しないところがNULLであることを認識させ、 カウントからはずすには、どのようにSQLを作成したら よいでしょうか?