• ベストアンサー

日付関数について

失礼します。 datファイルに、登録した日付を書き込む ストアドプロシージャを作成中です。 しかし、現在「to_char(sysdate,'YYYYMMDD hh24:mm:ssss')」 のように記述しテストをしてみると、 20070824 14:08:3737 20070824 14:08:4949 20070824 14:08:3030 のように出てしまい、ssssの特徴である"真夜中を過ぎた秒(0-86399)" が上手く出てくれません。(ssが2回連続で出てしまっているようです。。) 正確な記述方法を教えて頂けると助かります。 宜しくお願いいたします。

noname#107189
noname#107189
  • Oracle
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
noname#49428
noname#49428
回答No.1

秒は、"SSSSS"ではないですか?

参考URL:
http://biz.rivus.jp/datetime_format_element.html
noname#107189
質問者

お礼

ありがとうございました~。 どうやら、参考にしていたサイトの情報が 古かったみたいです(^^;;

関連するQ&A

  • 時間の抽出条件

    業務で開発中、どうしてもわからなかったので質問させていただきます。 あるテーブルから「データを抽出する日の14時までにできたデータのみを抽出する」というSQLですが、 データを抽出する日→SYSDATEでYYYYMMDDまでを取得する考えです。 このあとの14:00:00という条件をつけるSQLの書き方がわかりません。 このような書き方ではだめでしょうか? SELECT * FROM T_TEST WHERE DATAYMD < TO_CHAR(SYSDATE '14:00:00','YYYYMMDD HH24:MI:SS'); DATAYMDはCHAR型で8バイトで入っています。 よろしくお願いいたします。

  • 日付をVARCHAR2型でYYYYMMDDと表示したい

    DATE型(YYYY/MM/DD HH24:MI:SS)の値を取り出し、 VARCHAR2(8)型の文字列YYYYMMDDにしたいと思っています。 TO_CHAR(DATE型,'YYYYMMDD')としても、YY-MM-DDと表示されてしまいます。 YYYYMMDDと文字型で表示させるにはどうすればよいのでしょうか。 宜しくお願い致します。

  • oracle9i 日付データに関して

    お世話になっております。 Oracle9i(9.0.1.0.1) Linux RedHat7.3J JDBC 接続でOracle Type4 ドライバを使用しています。 本日の日付は2003/09/10で、sysdateも2003/09/10です。 この環境で、以下のSQL文を発行すると、 0件が返ってきます。 select count(*) from dual where '20030910' >= sysdate 以下の条件だと1件返ってきます。 select count(*) from dual where '20030911' >= sysdate さらに、sysdateにフォーマットを指定すると select count(*) from dual where '20030910' >= to_char(sysdate,'yyyymmdd') 1件返ってきます。 質問は、sysdateにto_charのフォーマットを指定した場合と 指定しなかった場合との違いについて教えていただきたいのと、 その違いが明文化されているサイトやotnドキュメントが ありましたら教えていただきたいのです。 otnドキュメントの日付データのところを読んだのですが 詳しい事はわかりませんでした。 宜しくお願いいたします。

  • [vbScript]ファイルの日付

    任意のファイルの作成日付を取得するまでは下記の記述でできたのですが、「YYYY/MM/DD hh:mm:ss」で取得します。 --------------------------- Set fso = CreateObject("Scripting.FileSystemObject") Set src = fso.Getfile(ckFile) WScript.Echo src.DateCreated --------------------------- YYYYMMDD形式で取得したい場合は、どうすればよいでしょうか?

  • MS-DOSでの日付表示

    MS-DOSコマンドで、日付や時刻の%date% %time%ですと、 yyyy/mm/dd hh:mm:ssの表示になります。 バッチファイルを作成して、フォルダ名の頭に日付時刻をつけたいんですが、 yyyymmdd hhmmss の表示形式にする方法が分かりません。 よろしかったら教えて頂けませんでしょうか。

  • 基本的なことですが;

    DATE型の変数を定義し現在の日付時刻を代入しYYYY/MM/DD:HH24:MI:SSフォーマットで 画面表示しろという 問題を与えられました。 select sysdate from dual; declare today date; today_ki date; begin select to_char (sysdate, 'yyyy/mm/dd') into today from dual; select to_char (sysdate, 'hh24:mi:ss') into today_ki from dual; dbms_output.put_line( today || ', ' || today_ki); end; / という風に作ってみたのですが うまくいきません。 どうかご教授ください><

  • SQL*Loader  フォーマット変換について

    SQL*Loaderの制御ファイル内で、 以下のような日付データを変換するにはどうしたらよいでしょうか? ・2010-12-06 00:00:00.000 以前は'2010-12-06 00:00:00'の形式だったので "to_char(to_date(:DENPYO_DATE,'YYYY-MM-DD HH24:MI:SS'),'YYYYMMDD')" のようにして変換が可能だったのですが、仕様変更がありましてこれに対応しなければいけなくなりました。 ちなみに安易な考えで以下のようにしたのですがさすがにだめでした... "to_char(to_date(:DENPYO_DATE,'YYYY-MM-DD HH24:MI:SS.000'),'YYYYMMDD')" 方法をご存知の方がいれば是非、ご教示いただきたく存じます。 よろしくお願いいたします。

  • sysdateの使い方

    TransLogという、すべての処理のログを残す処理を行うテーブルがあります。 ログの入ってきた処理日を今日の日付(sysdate)で表示させるようにしたいのですがうまくいきません。 どうか、ご教授お願いします。 create table TransLog( TransType varchar2(15), TransDate to_char (sysdate, 'DD-MON-YY'), TransTime to_char (sysdate, 'HH:MI:SS'), TransInfo varchar2(35), TransResult varchar2(5), primary key (TransType) ); これで実行すると、to_charのあとに'ORA-00907: missing right parenthesis'というエラーがでます。

  • PLSQL CHARの項目を使用した計算

    Oracle8iのストアドプロシジャを作成しています。 SELECT SYSDATE で取得したシステム時間から任意時間前の時刻を算出し、CHAR(16)の文字列(YYYYMMDDHHMMSSMS)にしたいのですが、 うまくいきません。 次のようなやり方をしています。 (1)システム時刻を取得し、CHAR型変数へ格納。 (2)時、分、秒ごとにCHAR型の変数へセット。 (3)TO_NUMBER関数でNUMBER型へ変換して、NUMBER型変数に格納。 (4)任意時間前の時刻の算出。 SQLPLUSの標準出力にログを出して確認したところ、分や秒(W_CHECK_SS )がマイナスになってしまいます。 どのようにすればうまくいくのかアドバイスをいただけたらと思います。 今は以下のように書いています。 CREATE OR REPLACE PROCEDURE TESTSP ( IN_KIJUN_TIME IN NUMBER --監視基準時間(秒) ) IS W_CURRENT_TIME16 CHAR(16); --システム時刻(16桁) W_CURRENT_TIME14 CHAR(14); --システム時刻(14桁) W_CURRENT_YYYYMMDD CHAR(8); --システム時刻(YYYYMMDD) W_CURRENT_HH NUMBER(2); --システム時刻(HH) W_CURRENT_MM NUMBER(2); --システム時刻(MM) W_CURRENT_SS NUMBER(2); --システム時刻(SS) W_CURRENT_HH_STR CHAR(2); --システム時刻(HH)CHAR型 W_CURRENT_MM_STR CHAR(2); --システム時刻(MM)CHAR型 W_CURRENT_SS_STR CHAR(2); --システム時刻(SS)CHAR型 W_CHECK_SEC NUMBER(5); --基準前時刻(計算用) W_CHECK_HH NUMBER(2); --基準前時刻(HH) W_CHECK_MM NUMBER(2); --基準前時刻(MM) W_CHECK_SS NUMBER(2); --基準前時刻(SS) W_CHECK_HMS CHAR(16); --基準前時刻(16桁) BEGIN /*-- システム時刻の取得 --*/ SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') INTO W_CURRENT_TIME14 FROM DUAL; -- ◆DEBUG START DBMS_OUTPUT.PUT_LINE('・システム時刻14 = ' || W_CURRENT_TIME14); -- ◆DEBUG END /*-- 基準前時刻の計算 --*/ W_CURRENT_YYYYMMDD := SUBSTR(W_CURRENT_TIME14,1,8); W_CURRENT_HH_STR := SUBSTR(W_CURRENT_TIME14,9,2); W_CURRENT_MM_STR := SUBSTR(W_CURRENT_TIME14,11,2); W_CURRENT_SS_STR := SUBSTR(W_CURRENT_TIME14,13,2); W_CURRENT_HH := TO_NUMBER(W_CURRENT_HH_STR); W_CURRENT_MM := TO_NUMBER(W_CURRENT_MM_STR); W_CURRENT_SS := TO_NUMBER(W_CURRENT_SS_STR); -- W_CHECK_SEC := W_CURRENT_HH * 3600 + W_CURRENT_MM * 60 + W_CURRENT_SS - IN_KIJUN_TIME; W_CHECK_HH := W_CHECK_SEC / 3600; W_CHECK_SEC := W_CHECK_SEC - (W_CHECK_HH * 3600); W_CHECK_MM := W_CHECK_SEC / 60; W_CHECK_SS := W_CHECK_SEC - (W_CHECK_MM * 60); W_CHECK_HMS := W_CURRENT_YYYYMMDD || W_CHECK_HH || W_CHECK_MM || W_CHECK_SS || '00'; -- ◆DEBUG START DBMS_OUTPUT.PUT_LINE('・W_CHECK_HH = ' || W_CHECK_HH); DBMS_OUTPUT.PUT_LINE('・W_CHECK_MM = ' || W_CHECK_MM); DBMS_OUTPUT.PUT_LINE('・W_CHECK_SS = ' || W_CHECK_SS); -- ◆DEBUG END (以下省略) 【標準出力】 SQL> EXEC TESTSP(60); ・引数:監視基準時間(秒) = 60 ・システム時刻14 = 20070308222543 ・システム時刻(YYYYMMDD) = 20070308 ・W_CHECK_HH = 22 ・W_CHECK_MM = 25 ・W_CHECK_SS = -17 ※システム時刻[22:25:43]の60秒前は22:24:43なので、 [2007030822244300]という文字列を作成したいのです

  • PL SQL のループ

    あるセレクト文のパフォーマンスを測定するためにループで複数回実行し時間を測定したいのですが、select 変数 into をしないとコンパイルできず実行できません。 同じセレクト文を複数回実行し時間を測定するのに良い方法は無いでしょうか? CREATE OR REPLACE PROCEDURE test IS BEGIN DBMS_OUTPUT.PUT_LINE(TO_CHAR(sysdate(),'YYYY/MM/DD HH24:MI:SS')); FOR i IN 1..100 LOOP SELECT a,b,c,d,e FROM tbl; END LOOP; DBMS_OUTPUT.PUT_LINE(TO_CHAR(sysdate(),'YYYY/MM/DD HH24:MI:SS')); END;