batで前月データを取得する方法

このQ&Aのポイント
  • batファイルを使用して、前月のデータを取得する方法について知りたいです。
  • 現在、sqlplusを使用して前月のデータを取得しようとしていますが、うまくいきません。
  • 月初日と月末日を設定して、前月のデータを取得する方法を教えてください。
回答を見る
  • ベストアンサー

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

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

  • Oracle
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
回答No.2

No1のやり方で、型が合わなければ、型変換すればいいだけ。 to_dateやto_charをマニュアルで調べると、今後幸せになれると思いますよ。 同じやり方を書いても面白くないので、たとえば、これでもOKだと思いますよ。 where to_char(sysdate-1,'yyyymm')||'%' like S.KJN_YMD

jjmmyy
質問者

お礼

ありがとうございます。型変換ができるとは知りませんでした。 勉強になりました。where句を以下のようにすることで、目的を 果たすことができました。 S.KJN_YMD LIKE to_char(add_months(sysdate,-1),'yyyymm')||'%'

その他の回答 (2)

  • dda167
  • ベストアンサー率76% (55/72)
回答No.3

※「当月」初日の求め方 「当日」を「月」で切り捨てる TRUNC(SYSDATE, 'MM') ※「前月」末日の求め方 「当月」初日の前日は「前月」末日 TRUNC(SYSDATE, 'MM') - 1 ※「前月」初日の求め方 「前月」末日を「月」で切り捨てる TRUNC(TRUNC(SYSDATE, 'MM') - 1, 'MM') ほかの方の回答と合わせれば、もう大丈夫でしょう。

jjmmyy
質問者

お礼

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

noname#189141
noname#189141
回答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のバージョンを明示してください。

jjmmyy
質問者

お礼

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

関連するQ&A

  • sqlplusでヘッダーが付かない

    サーバー:windows 2003server oracle10g クライアント:windows xp oracle10g 以下のsqlファイルをbatで起動し、テキストファイルを出力しています。 しかしながら、setのところにヘーダーを出力するよう宣言しているのに もかかわらず、出力されません。 どなたかおわかりになる方、いらっしゃいませんでしょうか? set echo off set heading on 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 hoge.txt select aaa||CHR(9)|| bbb||CHR(9)|| ccc||CHR(9)|| ddd from M_JITU; spool off EXIT

  • DBからタブ区切りのCSVデータを抽出する

    DBからCSVにしてデータを取り出そうと、ネットで検索して みようみまねでやってみました。(下記の場合カンマ区切りですが) タブ区切りで整列したデータを抽出したいのですが、特に、 (4)のように隣合う項目の間がかなり離れていて見えにくい状態で CSVファイルが作成されてしまいます。 (1)のように整列した形で、タブ区切りのCSVデータを抽出するには、 どのようにしたら宜しいのでしょうか? (2)、(3)は、試してみた実行ファイルです。 環境は、oracle10g windowsXPです。 (1)目的の結果の表示------------------------------- 653-5689 ZM05 田中太郎 YOKOHAMAS 4 4  9 097005・・・・・ 以下試してみたbatファイルとsqlで抽出 (2)batファイル---------------------------------- sqlplus ABCD/ABCD@oracle.host1.ser @abc.sql (3)sqlファイル----------------------------------- set echo off set heading off set termout off set pause off set pagesize 0 set trimspool on set feedback off set colsep "," set term off spool hoge.txt select * from T_JUTYU; spool off exit (4)結果--------------------------------- 653-5689 ,ZM05 田中太郎 ,YOKOHAMASI 4, 4, , ,9 ,097005 , 1 ,18 , , , , , 0 ,asahi asahi ,08-12-23,08-12-23, ------------------------------------------------まで結果

  • バッチからのSQLPLUS実行について

    はじめまして。 SQLPLUSでご質問ををさせてください。 環境 OS:Win2003server Oracle:10g バッチから、以下のようにSQLを実行したいと考えています。 バッチファイル sqlplus ID/PASS@インスタンス名 @SQLファイル.sql SQLファイル.sql set trimsool on set pagesize 0 set linsize 2000 set feedback off set colsep ',' spool on spool ABC.txt select * from xxx; spool off exit; ご質問  バッチファイルからSQLファイル.sqlが呼ばれているのですが、  接続時にENTERキーを押下しないと、後続の処理が実行されません。  ENTERキー押下後のメッセージ内容が  「バージョン情報の表示や、接続されました。」と出力されているため、  接続時の処理と思われます。    上記でENTERキーを押下せずに、処理を実行させるためにはどうすればよろしいでしょうか。  初歩的な質問で申し訳ありませんが、宜しくお願い致します。

  • SQLPlusでUnicode

    Windows XP上でOracle 9 リリース2によるデータベースを構築しようとしています。Unicodeで書かれた.sqlファイルを使って次のことをしたいのですが、うまくいかずに悩んでいます。アドバイスいただけませんでしょうか。 INSERT, DELETE, UPDATEなどのコマンドが記述された SQLスクリプトをSQLPlusにてデータベースに投入する。 このデータベースは次のようにNLS変数を設定しました。 NLS_CHARACTERSET = AL32UTF8 NLS_NCHAR_CHARACTERSET = UTF8 SQLPlusは.sqlファイルを読み取れずSP2-0042というエラーを出してきます。いくつかのエンコード(UTF8, Unicode, ANSI)で.sqlファイルを保存することを試したのですが、どの場合もSQLPlusではじかれました。オラクルをインストールするときに、いつかのタイミングで日本語と英語で動作するようにインストールしたのですが、それがSQLPlusでUnicodeを読み取れない原因なのでしょうか。 よろしくおねがいします。

  • [SQL Server] コマンドプロンプトからのCSV形式出力

    SQL ServerのテーブルデータをSELECTしてダブルコーテ区切りのCSVに出力したいと考えております。 ・batファイルからの起動を希望。 ・出力CSVファイル名はbatファイルより引数で指定したい。 ・出力後、DELETEも行いたい。 OracleだとSQL*Plus環境で下記のようにテキストレベルで簡単にできます。 SQL Serverでも同様のことができないでしょうか? 要は下記をSQL Server版でやりたいということです。 参考:Oracleだと・・・ 同一dirに、abc.batとabc.sqlを用意しabc.batを実行すると20070601.csvが生成される。 1.abc.bat rem ----abc.bat-ここから---- sqlplus usr/pwd@host @abc.sql 20070601.csv rem ----abc.bat-ここまで---- 2.abc.sql ----ファイル名=abc.sql-ここから--- set echo off set heading off SET VERIFY OFF set FEEDBACK OFF set TRIMSPOOL on set termout off set pagesize 0 set linesize 32767 spool &1 select '"'|| カラム1 ||'",'|| '"'|| カラム2 ||'",'|| '"'|| カラム3 ||'"' from テーブル1; spool off delete from テーブル1; exit ----ファイル名=abc.sql-ここまで--- 20070601.csv結果 -ファイル名=20070601.csv-ここから--- "20060726","scott","356160" "20060727","tiger","463391" "20060728","manager","1930" -ファイル名=20070601.csv-ここまで--- DBサーバ環境 OS:Win2003SvrR2 SQL Serverバージョン:わかりません。(2003にのってるので最近のだと思われます) Oracle経験者でSQLServer初心者です。マニュアルもなく、Web検索しても「SQL」「Server」ってなかなかうまくひっかからない!! ので質問あげさせていただきます。

  • batファイルからsql文実行

    クライアントOS:WIN2000 Oracle:9i(サーバ(UNIX)上にあります) 現在、クライアントからbatを起動し、SQL文を投げ、結果を取得したいと思っております。 (SQL文は単純にTBLをカウントしているだけです) ・batの中身 sqlplus %UID%/%PASS%@%SID% @test.sql > output 結果は取得出来るのですが、余分な情報も結果に出力されてしまいます。結果のみを出力させるにはどうすればよろしいでしょうか? ・余分な情報 Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.4.0 - Production に接続されました。

  • batファイルでのファイル名取得について

    おそれいります。ご教示くださいませ。 ファイル拡張子xxxをxxx.batに関連付けしました。 test.xxxをダブルクリックするとxxx.batが実行されるシカケです。 実行されたxxx.batでtest.xxxというファイル名を取得したいのですが方法がわかりません。 %0にはxxx.batがセットされてしまうからです。

  • dosのbatファイルでファイルを取得後、日付のフォルダをつくる。

    dosのbatファイルでクライアントPCからファイルを取得後、自分自身のPC(サーバー側)に日付(yyyymmdd)のフォルダを自動的に作り格納する方法はないでしょうか?

  • SQLPLUS USER/PASSログインできない

    sqlplus testuser/passwd@TESTの形式ではログインできますが、sqlplus testuser/passwdだとORA-01034、ORA-27101が発生します。 ORACLE_SIDは正しくセットしていますが、どのように調査すればよいか分かりませんので、教えて下さい。 以下は実行結果です。 USER[2]% sqlplus testuser/passwd@TEST SQL*Plus: Release 11.2.0.1.0 Production on 水 1月 11 22:19:45 2012 Copyright (c) 1982, 2009, Oracle. All rights reserved. Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options に接続されました。 SQL> exit Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing optionsとの接続が切 断されました。 USER[3]% setenv ORACLE_SID TEST USER[4]% env | grep ORACLE ORACLE_SID=TEST ORACLE_HOME=/opt/app/oracle/product/11.2.0/dbhome_1 ORACLE32_HOME=/home/oracle2/32Bit ORACLE_TERM=sun5 USER[5]% sqlplus testuser/passwd SQL*Plus: Release 11.2.0.1.0 Production on 水 1月 11 22:20:17 2012 Copyright (c) 1982, 2009, Oracle. All rights reserved. ERROR: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist SVR4 Error: 2: No such file or directory プロセスID: 0 セッションID: 0、シリアル番号: 0

  • .bat(バッチ)から.batを実行したいのですがエラーになってしまいます。

    <やりたい事> (1)メニュー的なバッチからOracleインストール後 (2)OracleのDB作成sqlを実行する.bat(バッチ)を実行する。 <現状> メニュー的バッチから(2)をCALLで呼びだすと「内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」とコンソールに表示されてしまいます。 コマンドの拡張子を実行できる設定になっている事は確認できています。 また、コマンドプロンプトから(2)のバッチを実行すると実行できました。 色々と調べて見たのですが原因、解決策が見つかりません。 どうか皆様のお力をお借りできればと思います。 宜しくお願いします。 ↓以下バッチの詳細 <(1)メニュー的なバッチ> ECHO OFF :Start ECHO. ECHO 1. ・・・ 運用APLデータベース設定 %P5% ECHO 99. ・・・ 終了 SET Process= SET Choice= SET /p Choice=Type 選択して下さい。 IF '%Choice%'=='1' GOTO MakeDB :MakeDB REM 5. 運用APLデータベース設定選択時 SET Process=運用APLデータベース設定 ECHO *** "%Process%"開始 *** REM 文字変換バッチ実行 CALL C:\TEMP\aaaa.bat IF ERRORLEVEL 1 GOTO ExceptionError :InputError REM 入力エラー時 ECHO 不正なパラメータが入力されました。 GOTO Start :ExceptionError REM 例外エラー時 ECHO ******** 失敗しました。 ******** GOTO Start :End REM バッチを終了する。 EXIT <(2)OracleのDB作成sqlを実行する.bat(バッチ)> SET ORACLE_INSTALL_DIR=C:\oraclexe SET ORACLE_BIN_DIR=%ORACLE_INSTALL_DIR%\app\oracle\product\10.2.0\server\BIN SET ADMIN_DIR=%ORACLE_INSTALL_DIR%\app\oracle\admin\XE SET ORADATA_DIR=%ORACLE_INSTALL_DIR%\oradata\XE SET DBS_DIR=%ORACLE_INSTALL_DIR%\app\oracle\product\10.2.0\server\dbs SET USERNAME=aaa SET PASSWORD=bbb REM // LOGファイル名用に日付の取得 // FOR /F "tokens=1,2,3 delims=/, " %%i IN ('date /t') DO SET SYSDATE=%%i%%j%%k REM // 「Win31J」に文字変換 // ECHO 文字変換開始 %date% %time% >> "C:\install%SYSDATE%.log" "%ORACLE_BIN_DIR%\sqlplus" %USERNAME%/%PASSWORD% as sysdba @C:\TEMP\Drop.sql >> "C:\install%SYSDATE%.log" IF ERRORLEVEL 1 GOTO ExceptionError ECHO DBユーザー作成開始 %date% %time% >> "C:\install%SYSDATE%.log" "%ORACLE_BIN_DIR%\sqlplus" %USERNAME%/%PASSWORD% as sysdba @C:\TEMP\CreateDB.sql >> "C:\install%SYSDATE%.log" IF ERRORLEVEL 1 GOTO ExceptionError