0

これには簡単な解決策があると仮定しますが、見つけることができません。

Oracle の DATE フィールドでいくつかのロジックを実行しようとしています。私の望みは、DATE フィールドを取得して、そこから X 時間を減算することです。

例えば:SELECT A.MyDATE - 100 Hours from dual;

ただし、タイムスタンプ形式「YYYY-MM-DD hh:mm」の結果が必要です。

試してみましたが、うまくいきませCAST(A.MyDATE as TIMESTAMP) - NUMTODSINTERVAL(100/24,'day')んでした。

問題は、タイムスタンプにキャストされたときの MyDATE フィールドにまだいくつかの残りの時間要素が含まれていることであることがわかりました。これらをリセットするにはどうすればよいですか??

ありがとう!

4

4 に答える 4

2

減算でこれを行うことができます:

select a.MyDate - 100.0/24

varchar に変換するには:

select to_char(a.MyDate - 100.0/24, 'YYYY-MM-DD')

そして、デートの厄介な時間を取り除きたい場合は、次のようにします。

select trunc(a.MyDate - 100.0/24) as JustTheDate
于 2013-02-08T19:13:46.983 に答える
2

この例の形式と日付は、他の形式と日付に変更できます。

SELECT To_Timestamp(To_Char(Sysdate - INTERVAL '100' HOUR, 'MM/DD/YYYY HH24:MI'), 'MM/DD/YYYY HH24:MI')
 FROM dual
/

Output:

2/4/2013 10:18:00.000000000 AM


To remove time element add Trunc() to any of your dates...:

SELECT Trunc(To_Timestamp(To_Char(Sysdate - INTERVAL '100' HOUR, 'MM/DD/YYYY HH24:MI'), 'MM/DD/YYYY HH24:MI'))
FROM dual
/

Output: 2/4/2013


Conversion/Casting - when using other dates in place of sysdate then add formats as in my other examples:

SELECT CAST(SYSDATE AS TIMESTAMP) - INTERVAL '100' HOUR FROM dual
/

Output: 2/4/2013 10:26:35.000000000 AM


SELECT start_date tstamp_to_date, CAST(start_date AS timestamp) date_to_tstamp FROM
 (
  SELECT to_date(to_char(to_timestamp ('2013-02-07 10:07:47.000' , 'YYYY-MM-DD HH24:MI:SS.FF'),'DD-MON-YYYY HH24:MI:SS'), 'DD-MON-YYYY HH24:MI:SS') start_date
  FROM dual
 )
/

Output:

tstamp_to_date          date_to_tstamp 
-------------------------------------------------------
2/7/2013 10:07:47 AM    2/7/2013 10:07:47.000000 AM
于 2013-02-08T19:15:31.540 に答える
1

Oracle では、 にはDATE常に曜日と時刻のコンポーネントがあります。使用しているツールとセッションの によってNLS_DATE_FORMATは、データを見たときにツールが時間コンポーネントを表示しない可能性があります。ただし、これは単なる表示上の質問であり、実際のデータには影響しません。

MyDateを表す日の午前 0 時から 100 時間を減算する場合

SELECT TRUNC(MyDate) - interval '100' hour
  FROM dual

これは を返しますDATE。特定の形式で文字列を返したい場合

SELECT TO_CHAR( TRUNC(MyDate) - interval '100' hour,  'YYYY-MM-DD hh:mi am' )
  FROM dual

あなたの質問にタイプミスがあったと仮定していることに注意してください。mi月 ( ) ではなく、時 ( ) の後に分を表示したいとしますmm

于 2013-02-08T19:26:22.457 に答える
0

(Mod_date から) 30 日より古いレコードを取得しようとしています。以下のクエリを使用しています。すべてのデータが返され、30 日経過したデータのみが必要です。

サンプル:- Mod_date 03-NOV-12 12.00.00.000000000 AM

クエリ:-

Mod_date <= sysdate -30 順 Mod_date asc である fil_cnfact から Mod_date を選択します。

于 2013-03-08T19:52:01.903 に答える