能用sql解決的事,絕不碰程式為每一條記錄新增
create_time
和update_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_time
是utc
的時間,用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...