我正在進入Oracle數據庫。我遇到了TRUNC(DATE, [FMT])
函數。我不是很清楚它,除了它似乎返回某種初始值?何時以及爲什麼現實世界中使用的TRUNC(日期,[格式化])
有人可以教我嗎?什麼時候或將在工作中使用什麼,或爲什麼有人可能想要使用該功能?
我正在進入Oracle數據庫。我遇到了TRUNC(DATE, [FMT])
函數。我不是很清楚它,除了它似乎返回某種初始值?何時以及爲什麼現實世界中使用的TRUNC(日期,[格式化])
有人可以教我嗎?什麼時候或將在工作中使用什麼,或爲什麼有人可能想要使用該功能?
另一件事是有用的是讓當天的時間成分。我使用表達式像這一切的時候:
SELECT sysdate - trunc(sysdate) AS TodaysTime FROM DUAL
由於系統日期存儲在一個十進制格式(例如sysdate = 42651.2426897456
)和整數值對應於午夜時分,我可以使用上面的語句,僅保留小數點部分(例如TodaysTime = 0.2426897456
,或者早上6點之前)。
可能有更簡單的方法來做到這一點,但在我的應用程序中,這是最容易的,因爲我經常只需要使用當天的時間組件。
我必須查找十進制格式。大聲笑!我永遠不會知道這樣的事情是可用的。學到了新東西。謝謝。 – javaTwilight
試試這個查詢知道什麼時候它可能是有用的:
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')
謝謝,我現在可以看到它如何在我的工作中使用 – javaTwilight
如果你不喜歡這個問題,那麼請[upvote it](https://meta.stackexchange.com/questions/173399/how-to-upvote-on-堆棧溢出)謝謝。 – krokodilko
會做。我認爲第三列beginning_of_current_hour應該是hh。再次感謝 – javaTwilight
一個真實世界的例子就是如果你想每年按表格彙總結果。您可以使用TRUNC函數是這樣的:
SELECT TRUNC(my_date, 'YEAR') the_year, count(*)
FROM some_table
GROUP BY TRUNC(my_date, 'YEAR');
...這將日期截斷返回的結果集與第一列到今年年初,第二列的所有記錄與計數日期在那一年內。
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
感謝您的例子。我只是沒有看到以前如何使用它。 – javaTwilight
沒問題。隨時提出答案。 ;-) – Momus
*「它返回起始值或某種類型」*您是否閱讀過[documentation](https://docs.oracle.com/database/122/SQLRF/TRUNC-date.htm#SQLRF06151) ?文檔的哪一部分讓你對函數的功能感到困惑?它甚至有一個很好的例子。 – Andreas