sql那些事 時間處理的一攬子事

2021-10-22 19:51:33 字數 1872 閱讀 1277

能用sql解決的事,絕不碰程式

為每一條記錄新增create_timeupdate_time是非常明智的選擇,分別表示當前記錄第一次新增和最後一次更改的時間戳。

如果你不知道sql語句可以自動完成這個事兒,那麼就不可避免要在程式中手動去設定這兩個欄位的值。

`create_time` datetime default current_timestamp, 

`update_time` datetime default current_timestamp on update current_timestamp,

只要在create table中加上這兩個字段,剩下的事兒壓根不需要再操心了。

很多時候為了程式處理方便統一,表中某個欄位的時間是utc時間,但是生成報表需要轉化成北京時間。

select convert_tz(create_time, "+00:00", "+8:00") as bj_create_time from test_table
其中字段create_timeutc的時間,用convert_tz()函式可以轉成北京時間。

有時候需要獲取最近7天的建立的資料,那麼我們就需要對日期做乙個對比,可以借助current_date()來完成。

select * from test_table where create_time > current_date() - interval 7 day
current_date()獲取的是資料庫預設設定時區的日期,即utc時區,如果create_time是乙個北京時間怎麼辦?

很簡單,結合時區轉化函式就可以將current_date()轉換成北京時間。。

select * from test_table 

where create_time > convert_tz(current_date() - interval 7 day, "+00:00", "+08:00")

下面這個sql可以用來獲取當天的資料,需要用date()函式來獲取時間欄位的日期值。

select * from test_table where date(create_time) = current_date()
如果要按月進行統計怎麼辦?如果要把時間格式化成某乙個特定的格式怎麼做?不需要查出來後用程式處理,sql語句也能通通搞定。

有乙個很常用的時序統計相關的需求,按照月統計新增使用者數量並按照日期從小到大排序。

-- 格式化成月

select

count(*) as cnt,

date_format(create_time, '%y-%m') as x

from test_table group by x

group by x

order by x

-- 格式化成天

select

count(*) as cnt,

date_format(create_time, '%y/%m/%d 00:00:00') as x

from test_table

group by x

order by x

上面出來的結果就是時間序列的統計結果,某年某月的某一天的某個時辰,都不是問題。

參考date and time functions

專案中的那些事 時間戳 一

一 時間戳 簡單講,unix時間戳就是從1970 01 01開始所經過的秒數,什麼時候獲取時間戳,就是到那個時間點所經歷的秒數。二 j ascript獲取時間戳 根據時間戳的定義,可以使用j ascript中的幾個方法來獲取系統當前的時間戳 1 gettime w3c school的解釋如下 根據上...

C 異常處理的那些事

abort 函式是c 的乙個錯誤處理函式,實現方式是向標準錯誤流 cerr 傳送 abnormal program termination 不同作業系統內容可能有差別 使用try.catch.模式時如果throw的異常沒被catch到,程式最終會呼叫abort 函式。exception類 虛基類,包...

一文帶你搞定SQL中日期時間那些事

前語 使用的sql多了不知道大家有沒這樣的困惑,sql的語法大的方面是一致的,如select,join,group by等,但是在一些函式或某些特定功能處理上還是有很大差異的,而這些差異經常給大家帶來困惑,尤其是乙個新手從一種sql轉到另一種sql的時候,總是抓耳撓腮,不知所措。今天就把大家常用的s...