dポイントプレゼントキャンペーン実施中!

お願い致します。
ORACLEのWHERE句に対する疑問点ですが、
カレンダを管理するテーブル(カレンダマスタ)において、条件を指定してデータをSELECTする時にWHERE句に記入するデータ型についてご指導お願いします。

<詳細>
目的としてカレンダマスタよりSYSDATEの年月の休みの日を除く、稼動日数(COUNT)を求めるのが、目的です。
自分で作成した、SQLでは目的を果たしているのですが、WHERE句にTO_CHARを使用し、抽出項目(年月日-DATE型)を指定しているのですが、条件を指定する時は、TO_CHARで指定しても問題は無いのでしょうか?

<SQL>
SELECT COUNT(TO_NUMBER(休みFLG)) AS 稼動日
FROM カレンダマスタ
WHERE 年月日 BETWEEN (TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1,'YYYY/MM/DD')) AND (TO_CHAR(LAST_DAY(SYSDATE),'YYYY/MM/DD')) AND 休みFLG='0'

<補足>
休みFLG='0'は稼動日

A 回答 (2件)

問題はないと思います。


が、BETWEEN以降のTO_DATE、TO_CHARは共に不要と思います。
ただし、時間指定を排除したいという意味であれば別ですが。(その場合、ちょっとわかりにくくなってしまうので、私ならTRUNC関数を使います)

ちなみに、
>SELECT COUNT(TO_NUMBER(休みFLG)) AS 稼動日
のTO_NUMBERも不要かと。

聞かれてないことまで書いてしまってゴメンなさい。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
TO_DATE部は記述ミスで両方とも「TO_CHAR」です。
TRUNC関数を用いてみましたが、うまくいかなかったです。これはこれで調べてやってみようと思います。アドバイスありがとうございました。

お礼日時:2004/12/08 20:45

暗黙の型変換が行われていませんか?



BETWEEN の前半は[TO_DATE]ですが、後半は[TO_CHAR]ですね。
気になるなら [年月日][BETWEENの前半][BETWEENの後半]を
CHARに統一すれば安心できるかな。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
前半のTO_DATE部は記述ミスでした。ご指摘通り、両方「TO_CHAR」です。アドバイスありがとうございました。

お礼日時:2004/12/08 20:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す