C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: WHERE内でIF、CASE等を使用する方法について


(過去ログ 62 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■35496 / inTopicNo.1)  WHERE内でIF、CASE等を使用する方法について
  
□投稿者/ Jinks (1回)-(2009/05/06(Wed) 12:04:36)

分類:[その他の言語] 

はじめまして、Jinksと申します。

SQLのことで質問です。
毎日動かすSQLで、「今日が何年度かを調べ、3年度以前のものを削除する。」
という文を作成したいのですが、うまくいきません。

現在のSQL文
DELETE FROM TEBLE WHERE IF TO_CHAR(CURRENT_DATE,'MM') > '3' THEN 年度 <= TO_CHAR(CURRENT_DATE,'YYYY')-3
ELSE 年度 <= TO_CHAR(CURRENT_DATE,'YYYY')-4;

というように、今日の「月」を調べ、それにより今日の「年」を「-3」又は「-4」するようにしたいのです。
別にSQL文であれば他の方法でもかまいません。

どなたかご教授願います。<(_ _)>
引用返信 編集キー/
■35497 / inTopicNo.2)  Re[1]: WHERE内でIF、CASE等を使用する方法について
□投稿者/ オショウ (171回)-(2009/05/06(Wed) 13:00:10)
No35496 (Jinks さん) に返信
> はじめまして、Jinksと申します。
>
> SQLのことで質問です。

  SQL Server ですか?

> 毎日動かすSQLで、「今日が何年度かを調べ、3年度以前のものを削除する。」
> という文を作成したいのですが、うまくいきません。

  年度ではありませんが・・・

delete
from
hogehoge
where
hoge_DATE < dateadd(yy,-3,getdate())

  で、現時点から3年前以前を削除できます。

  年度ならば、3月31日で年度替わりするので、上記のままではズレが
  生じます。補正計算して下さい。

以上。参考まで

引用返信 編集キー/
■35499 / inTopicNo.3)  Re[2]: WHERE内でIF、CASE等を使用する方法について
□投稿者/ Jinks (2回)-(2009/05/06(Wed) 15:25:46)
オショウさん 早速の返信ありがとうございます。

「SQL」は、DBはOracleでSQLPLUSを使用してSQL文を入力してます。
また、今回は年度削除が必要になります。

補足としてDBのレイアウトを少し。

日付(DATE型)、年度(数値型)、人数(数値型)・・・

上記のように取り込み時に既に年度は計算されておりますので、
今日が何年度か計算できれば問題解決が出来そうな気がします。

再度お願いします。


引用返信 編集キー/
■35503 / inTopicNo.4)  Re[3]: WHERE内でIF、CASE等を使用する方法について
□投稿者/ よねKEN (326回)-(2009/05/06(Wed) 17:33:02)
> 「SQL」は、DBはOracleでSQLPLUSを使用してSQL文を入力してます。

バージョンは?CURRENT_DATEを使っているようなので9i以降だと思いますが。

Oracle9i以降の検証環境がないのでまったく検証していませんが、以下のような感じでいけませんかね。
#とくに各関数の仕様や動作(TO_CHAR、TO_NUMBER、CURRENT_DATEなどの使い方)が今回の目的に正しく適合しているかはわかりません。

下記のサイトを参考にしました。
http://www.shift-the-oracle.com/sql/functions/index-a.html


DELETE FROM TEBLE WHERE
年度 <=
(SELECT CASE WHEN TO_CHAR(CURRENT_DATE,'MM') > '03'
THEN TO_NUMBER(TO_CHAR(CURRENT_DATE,'YYYY')) - 3
ELSE TO_NUMBER(TO_CHAR(CURRENT_DATE,'YYYY')) - 4
END FROM DUAL)

引用返信 編集キー/
■35515 / inTopicNo.5)  Re[4]: WHERE内でIF、CASE等を使用する方法について
□投稿者/ Jinks (3回)-(2009/05/07(Thu) 11:26:07)
よねKENさん ありがとうございます。
うまく動きました!!
ちなみにOracleは10gでした。
今後もよろしくお願いします。

No35503 (よねKEN さん) に返信
>>「SQL」は、DBはOracleでSQLPLUSを使用してSQL文を入力してます。
>
> バージョンは?CURRENT_DATEを使っているようなので9i以降だと思いますが。
>
> Oracle9i以降の検証環境がないのでまったく検証していませんが、以下のような感じでいけませんかね。
> #とくに各関数の仕様や動作(TO_CHAR、TO_NUMBER、CURRENT_DATEなどの使い方)が今回の目的に正しく適合しているかはわかりません。
>
> 下記のサイトを参考にしました。
> http://www.shift-the-oracle.com/sql/functions/index-a.html
>
>
> DELETE FROM TEBLE WHERE
> 年度 <=
> (SELECT CASE WHEN TO_CHAR(CURRENT_DATE,'MM') > '03'
> THEN TO_NUMBER(TO_CHAR(CURRENT_DATE,'YYYY')) - 3
> ELSE TO_NUMBER(TO_CHAR(CURRENT_DATE,'YYYY')) - 4
> END FROM DUAL)
>
解決済み
引用返信 編集キー/
■35517 / inTopicNo.6)  Re[5]: WHERE内でIF、CASE等を使用する方法について
□投稿者/ みきぬ (416回)-(2009/05/07(Thu) 12:22:35)
遅ればせながら、誰も書いてないので。

> 今日が何年度か
今日の日付からマイナス3ヶ月して、得られた日付の年が年度にあたります。
SQLは(めんどくさ…もとい、Oracleの環境がないので)示しませんが、既に挙げられているものの応用でいけると思います。

もし別の会計年度(10月1日〜翌年9月30日とか)を採用してても、同様の考え方でいけます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -