2017-08-14 6 views
2

私はTRUNC(DATE, [FMT])関数を見つけました。私はそれが何らかの初期値を返すようであることを除いて、それについては本当に明確ではないのですか?現実世界で使用されているTRUNC(DATE、[FORMAT])はいつ、なぜOracleデータベースに入っていますか?

誰かが私にそれを教えることができますか?いつ、いつ仕事で使うのですか?誰かがこの機能を使いたいのですか?

+1

*「最初の値または何らかのソートを返します」* [documentation](https://docs.oracle.com/database/122/SQLRF/TRUNC-date.htm#SQLRF06151) ?関数の機能について、ドキュメントのどの部分があなたを混乱させていますか?それは、それが何をするかの良い例を持っています。 – Andreas

答えて

0

それは便利ですもう一つは、現在の時刻コンポーネントを取得することです。システムの日付は10進形式(例えばsysdate = 42651.2426897456)に格納されているので

SELECT sysdate - trunc(sysdate) AS TodaysTime FROM DUAL 

と整数値は真夜中に対応して、私は小数点以下を得るために、上記のステートメントを使用することができます。私はこのような表現のすべての時間を使用します(例えば、TodaysTime = 0.2426897456、または午前6時の直前)。

これを行うのが簡単な方法があるかもしれませんが、私のアプリケーションでは、これは日の時間コンポーネントだけで頻繁に作業する必要があるため、最も簡単です。

+0

私は10進形式を参照する必要があります。笑!私はそれが利用可能だったようなものを知らなかったでしょう。新しいことを学びました。ありがとう。 – javaTwilight

1

それは便利かもしれない時に知っているこの文字列で検索してください:

ALTER SESSION SET NLS_DATE_FORMAT = 'yyyy-mm-dd hh24:mi:ss'; 

select sysdate, 
     trunc(sysdate, 'mi') As beginning_of_current_minute, 
     trunc(sysdate, 'mi') As beginning_of_current_hour, 
     trunc(sysdate, 'dd') As beginning_of_current_day, 
     trunc(sysdate, 'iw') As beginning_of_current_week, 
     trunc(sysdate, 'mm') As beginning_of_current_month, 
     trunc(sysdate, 'q') As beginning_of_current_Quarter, 
     trunc(sysdate, 'y') As beginning_of_current_Year 
FROM dual; 

例を - あなたはすべての注文は、現在の週の先頭から取得したい:

SELECT * 
FROM ORDERS 
WHERE order_date >= trunc(sysdate, 'iw') 
+0

ありがとう、私は今どのように私の仕事で使用することができます参照してください – javaTwilight

+0

あなたがこのunswerが好きなら、[アップ]してください(https://meta.stackexchange.com/questions/173399/how-to-upvote-on-スタックオーバーフロー)ありがとう。 – krokodilko

+0

となります。私は第3列、beginning_of_current_hourはhhでなければならないと思います。再度ありがとう – javaTwilight

1

実際の世界の例は、年ごとにテーブルから結果を集計したい場合です。日付は今年の初め、第2列にして、すべてのレコードの数を切り捨て、最初の列と結果のセットを返すことになる...

SELECT TRUNC(my_date, 'YEAR') the_year, count(*) 
FROM some_table 
GROUP BY TRUNC(my_date, 'YEAR'); 

:あなたはこのようにTRUNC関数を使用することができますその年の日付。

the_year, count(*) 
_________________ 
01-JAN-12, 543 
01-JAN-13, 1268 
01-JAN-14, 1134 
01-JAN-15, 1765 

明らかに、同じことを達成する他の方法もありますが、これはTRUNCをどのように使用するかの現実的な例です。

また、日付を比較していて、ある程度の精度しか使用しない場合もあります。タイムスタンプ列があり、今日のすべてのレコードが必要な場合は、タイムスタンプが昨日の深夜よりも深夜よりも小さい範囲に基づいて選択するか、またはDATEに切り捨てられたタイムスタンプの場所を選択できます今日と等しい。

https://docs.oracle.com/cd/E29805_01/server.230/es_eql/src/cdfp_analytics_lang_trunc.html

+0

あなたの例をありがとう。私はそれを以前にどのように使用するか分かりませんでした。 – javaTwilight

+0

問題ありません。答えをupvoteに自由に感じてください。 ;-) – Momus

関連する問題