アプリ版:「スタンプのみでお礼する」機能のリリースについて

sqlplusにてbatファイルを起動するだけで前月のデータを取得しようとしていますが、
ネットで検索等してもなかなかうまく行きません。


以下のようにbatファイルを起動すると、常に前月のT_URIのデータを取得させたいのですが、
どのようにすれば宜しいでしょうか?ご教示頂けると助かります。(期間の日付をじかに入力すれば、取得できたのですが、同じように取得したいテーブルが複数あるので)
月初日は常に1日、月末日は常に31日にして、前月をbatファイルかsqlファイル上で計算させる方法はないのでしょうか?
(会社の業務でoracleのデータベースから抜き出そうとしています。)

SQLPLUS ABCD/ABCD@ORACLE.XYZ.WW @0031_ymd.sql
PAUSE

↓0031_ymd.sql
set heading on
set echo off
set underline off
set termout off
set pause off
set pagesize 0
set trimspool on
set feedback off
set termout off
set linesize 1000
set lines 30000
spool D:\hoge.csv
SELECT * FROM T_URI S
WHERE
AND S.KJN_YMD >= yyyymmdd
AND S.KJN_YMD <= yyyymmdd

A 回答 (3件)

No1のやり方で、型が合わなければ、型変換すればいいだけ。


to_dateやto_charをマニュアルで調べると、今後幸せになれると思いますよ。

同じやり方を書いても面白くないので、たとえば、これでもOKだと思いますよ。
where to_char(sysdate-1,'yyyymm')||'%' like S.KJN_YMD
    • good
    • 0
この回答へのお礼

ありがとうございます。型変換ができるとは知りませんでした。
勉強になりました。where句を以下のようにすることで、目的を
果たすことができました。

S.KJN_YMD LIKE to_char(add_months(sysdate,-1),'yyyymm')||'%'

お礼日時:2012/12/25 11:52

※「当月」初日の求め方



「当日」を「月」で切り捨てる

TRUNC(SYSDATE, 'MM')

※「前月」末日の求め方

「当月」初日の前日は「前月」末日

TRUNC(SYSDATE, 'MM') - 1

※「前月」初日の求め方

「前月」末日を「月」で切り捨てる

TRUNC(TRUNC(SYSDATE, 'MM') - 1, 'MM')

ほかの方の回答と合わせれば、もう大丈夫でしょう。
    • good
    • 0
この回答へのお礼

解説ありがとうございました。助かりました。

お礼日時:2012/12/25 11:50

WHERE S.KJN_YMD BETWEEN TRUNC(ADD_MONTHS(SYSDATE, -1)) AND TRUNC(SYSDATE) -1



※データベースサーバーの日時、タイムゾーンが正確であること
※S.KJN_YMD がDate型で、日付しか保持していない(時刻は00:00:00)こと

もし、次回以降も質問されるのでしたら、SQL*Plusで操作するOracleのバージョンを明示してください。
    • good
    • 0
この回答へのお礼

早速のご教示ありがとうございます。
しかしながら、S.KJN_YMDの型は、VARCHAR2でした。
バージョンは、Oracle10g(10.1.0)です。
何か手立てはないものでしょうか?

お礼日時:2012/12/24 17:27

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

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