-PR-
  • 困ってます
  • 質問No.7859377
解決
済み

batでsqlplusによる前月データを取得

  • 閲覧数1149
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 71% (10/14)

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
  • 回答数3
  • 気になる数0

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

  • 回答No.2
レベル13

ベストアンサー率 55% (526/942)

No1のやり方で、型が合わなければ、型変換すればいいだけ。
to_dateやto_charをマニュアルで調べると、今後幸せになれると思いますよ。

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

お礼率 71% (10/14)

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

S.KJN_YMD LIKE to_char(add_months(sysdate,-1),'yyyymm')||'%'
投稿日時 - 2012-12-25 11:52:53
  • ありがとう数0
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1

WHERE S.KJN_YMD BETWEEN TRUNC(ADD_MONTHS(SYSDATE, -1)) AND TRUNC(SYSDATE) -1 ※データベースサーバーの日時、タイムゾーンが正確であること ※S.KJN_YMD がDate型で、日付しか保持していない(時刻は00:00:00)こと もし、次回以降も質問されるのでしたら、SQL*Plusで操作するOracleのバージョンを明示して ...続きを読む
WHERE S.KJN_YMD BETWEEN TRUNC(ADD_MONTHS(SYSDATE, -1)) AND TRUNC(SYSDATE) -1

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

もし、次回以降も質問されるのでしたら、SQL*Plusで操作するOracleのバージョンを明示してください。
お礼コメント
jjmmyy

お礼率 71% (10/14)

早速のご教示ありがとうございます。
しかしながら、S.KJN_YMDの型は、VARCHAR2でした。
バージョンは、Oracle10g(10.1.0)です。
何か手立てはないものでしょうか?
投稿日時 - 2012-12-24 17:27:26
  • ありがとう数0
  • 回答No.3
レベル9

ベストアンサー率 76% (55/72)

※「当月」初日の求め方 「当日」を「月」で切り捨てる TRUNC(SYSDATE, 'MM') ※「前月」末日の求め方 「当月」初日の前日は「前月」末日 TRUNC(SYSDATE, 'MM') - 1 ※「前月」初日の求め方 「前月」末日を「月」で切り捨てる TRUNC(TRUNC(SYSDATE, 'MM') - 1, � ...続きを読む
※「当月」初日の求め方

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

TRUNC(SYSDATE, 'MM')

※「前月」末日の求め方

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

TRUNC(SYSDATE, 'MM') - 1

※「前月」初日の求め方

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

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

ほかの方の回答と合わせれば、もう大丈夫でしょう。
お礼コメント
jjmmyy

お礼率 71% (10/14)

解説ありがとうございました。助かりました。
投稿日時 - 2012-12-25 11:50:27
  • ありがとう数0
  • 回答数3
  • 気になる数0
このQ&Aのテーマ
このQ&Aで解決しましたか?

関連するQ&A

-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


-PR-

ピックアップ

-PR-
ページ先頭へ