- ベストアンサー
WHERE句でのデータ型について
お願い致します。 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'は稼動日
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
問題はないと思います。 が、BETWEEN以降のTO_DATE、TO_CHARは共に不要と思います。 ただし、時間指定を排除したいという意味であれば別ですが。(その場合、ちょっとわかりにくくなってしまうので、私ならTRUNC関数を使います) ちなみに、 >SELECT COUNT(TO_NUMBER(休みFLG)) AS 稼動日 のTO_NUMBERも不要かと。 聞かれてないことまで書いてしまってゴメンなさい。
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
暗黙の型変換が行われていませんか? BETWEEN の前半は[TO_DATE]ですが、後半は[TO_CHAR]ですね。 気になるなら [年月日][BETWEENの前半][BETWEENの後半]を CHARに統一すれば安心できるかな。
お礼
早速のご回答ありがとうございます。 前半のTO_DATE部は記述ミスでした。ご指摘通り、両方「TO_CHAR」です。アドバイスありがとうございました。
お礼
ご回答ありがとうございます。 TO_DATE部は記述ミスで両方とも「TO_CHAR」です。 TRUNC関数を用いてみましたが、うまくいかなかったです。これはこれで調べてやってみようと思います。アドバイスありがとうございました。