關於日期型別的一些心得
阿新 • • 發佈:2018-11-17
這幾天在處理涉及到時間的一些sql問題,在處理過程中發現一些很有意思的點。
首先,對於日期或是時間型別,事實上oracle是將其轉化成數字,例如將倆個日期進行相減得到的結果是數值。
這也就是為什麼日期和時間倆種類型,同樣可以做等值判斷。
即得知了這個原理之後,我們不難可以得知為何這個語句能夠正確執行,事實上oracle在儲存日期型別時,年月日按整數位儲存,而時分秒則是按小數為存取。
其次,我們都知道trunc()函式可以用來解決擷取資料,例如:
在沒有對trunc()函式給定引數的情況下,預設只獲取整數部分,由於該文章是處理時間型別,因此不對trunc()函式做過多描述。trunc()函式同樣對時間型別有效,因為時間型別本質上儲存的是數值,那麼用trunc()函式來對時間型別做處理,預設情況下是返回年月日,前些天遇到了一種需求,是講希望通過當前時間,查詢到過去3天的時間內的資料。
假設現在時間是2018/11/17 11:45:00,我希望查詢到2018/11/14 至 2018/11/16期間的就診數量資訊,如果使用trunc()函式就能很快的統計出來。當然我們也可以統計每個小時的就診情況,只需要調整GROUP BY 語句就可以了,這裡不做演示。
想到這裡,我想其前段時間遇到的一個需求,在統計每日的就診數量時,如果當前沒有就診人次,希望結果顯示為0,我相信絕大多數人第一時間想到的是用nvl(), count()之類的函式來做數量統計,事實上並非如此,這裡面設定空值和沒有值的區別,不太明白的同學可以查閱相關資料,自己動手測試下就明白了。
當時我採用的辦法是通過時間表進行外連線,強行獲取就診日期,來進行統計。當然目前重點是如何通過trunc()函式配合來提高程式碼的效率。