2017-08-14 22 views
2

我正在進入Oracle數據庫。我遇到了TRUNC(DATE, [FMT])函數。我不是很清楚它,除了它似乎返回某種初始值?何時以及爲什麼現實世界中使用的TRUNC(日期,[格式化])

有人可以教我嗎?什麼時候或將在工作中使用什麼,或爲什麼有人可能想要使用該功能?

+1

*「它返回起始值或某種類型」*您是否閱讀過[documentation](https://docs.oracle.com/database/122/SQLRF/TRUNC-date.htm#SQLRF06151) ?文檔的哪一部分讓你對函數的功能感到困惑?它甚至有一個很好的例子。 – Andreas

回答

0

另一件事是有用的是讓當天的時間成分。我使用表達式像這一切的時候:

SELECT sysdate - trunc(sysdate) AS TodaysTime FROM DUAL 

由於系統日期存儲在一個十進制格式(例如sysdate = 42651.2426897456)和整數值對應於午夜時分,我可以使用上面的語句,僅保留小數點部分(例如TodaysTime = 0.2426897456,或者早上6點之前)。

可能有更簡單的方法來做到這一點,但在我的應用程序中,這是最容易的,因爲我經常只需要使用當天的時間組件。

+0

我必須查找十進制格式。大聲笑!我永遠不會知道這樣的事情是可用的。學到了新東西。謝謝。 – 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

如果你不喜歡這個問題,那麼請[upvote it](https://meta.stackexchange.com/questions/173399/how-to-upvote-on-堆棧溢出)謝謝。 – krokodilko

+0

會做。我認爲第三列beginning_of_current_hour應該是hh。再次感謝 – javaTwilight

1

一個真實世界的例子就是如果你想每年按表格彙總結果。您可以使用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

+0

感謝您的例子。我只是沒有看到以前如何使用它。 – javaTwilight

+0

沒問題。隨時提出答案。 ;-) – Momus

相關問題