內容目錄
簡介
今天開發中,做一個功能需要對歷史數據進行補充,相信大家也遇到過這樣的情況,這個歷史數據需要按月份和人的id進行區分,於是想到了mysql的時間格式化,這樣直接寫個sql腳本就不需要程序去執行了,在做到這一塊時我個人對時間這一塊沒有詳細了解過,所以借助這個機會整理一下mysql時間相關的內容,其實我這次主要用的是時間格式轉換功能,腳本如下
1INSERT INTO `xxxx`.`xxxxx`(`years_month`, `receipt_user_id`, `receipt_freight_charge`, `receipt_other_charges`, `receipt_waiting_charge`, `receipt_insurance_premium`, `c_u`, `c_t`)
2SELECT DATE_FORMAT(c_t,'%y%m'), receipt_user_id, IFNULL(SUM(receipt_freight_charge), 0), IFNULL(SUM(receipt_other_charges), 0),
3IFNULL(SUM(receipt_waiting_charge), 0), IFNULL(SUM(receipt_insurance_premium), 0), 'system', SYSDATE() FROM t_account_truck_drv WHERE c_t < '2019-11-01 00:00:00' GROUP BY DATE_FORMAT(c_t,'%y%m'), receipt_user_id;
mysql時間類型
mysql字段的時間類型分為5種:DATE
,DATETIME
,TIME
,TIMESTAMP
,YEAR
;
說實話這五種類型我以前只用datetime,為什么用大家都用這個,所以今天趁這個機會整理學習一下。
類型 | 字節大小 | 范圍 | 格式 | 零值 | 用途 |
---|---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-32 | YYYY-MM-DD | 0000-00-00 | 日期值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-32 23:59:59 | YYYY-MM-DD hh:mm:ss | 0000-00-00 00:00:00 | 混合日期和時間值 |
TIME | 3 | -838:59:59/838:59:59 | hh:mm:ss | 00:00:00 | 時間值 |
TIMESTAMP | 4 | 1970-01-01 00:00:01/2038-01-19 03:14:07 | YYYY:MM:DD: hh:mm:ss | 0000-00-00 00:00:00 | 混合日期和時間值,時間戳 |
YEAR | 1 | 1901/2155 | YYYY | 0000 | 年份值 |
每個時間類型都有一個有效范圍和一個零值,當指定的類型的值超過有效范圍時,就會使用零值
上表對各個字段的羅列已經很詳細了,根據業務的不同選擇合適的字段,只是timestamp還有十幾年就到期了,感覺這個不太靠譜了其余的也就沒啥了
DATE_FORMAT()函數
DATE_FORMAT() 函數用於以不同的格式顯示日期/時間數據。
語法
1DATE_FORMAT(date,format)
date 參數是合法的日期。format 規定日期/時間的輸出格式。
示例:
1SELECT DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p'); //Nov 20 2019 03:11 PM
2SELECT DATE_FORMAT(NOW(),'%m-%d-%Y'); //11-20-2019
3SELECT DATE_FORMAT(NOW(),'%d %b %y'); //20 Nov 19
4SELECT DATE_FORMAT(NOW(),'%d %b %Y %T:%f'); //20 Nov 2019 15:11:22:000000
格式描述:
格式 | 描述 |
---|---|
%a | 縮寫星期名 |
%b | 縮寫月名 |
%c | 月,數值 |
%D | 帶有英文前綴的月中的天 |
%d | 月的天,數值(00-31) |
%e | 月的天,數值(0-31) |
%f | 微秒 |
%H | 小時 (00-23) |
%h | 小時 (01-12) |
%I | 小時 (01-12) |
%i | 分鍾,數值(00-59) |
%j | 年的天 (001-366) |
%k | 小時 (0-23) |
%l | 小時 (1-12) |
%M | 月名 |
%m | 月,數值(00-12) |
%p | AM 或 PM |
%r | 時間,12-小時(hh:mm:ss AM 或 PM) |
%S | 秒(00-59) |
%s | 秒(00-59) |
%T | 時間, 24-小時 (hh:mm:ss) |
%U | 周 (00-53) 星期日是一周的第一天 |
%u | 周 (00-53) 星期一是一周的第一天 |
%V | 周 (01-53) 星期日是一周的第一天,與 %X 使用 |
%v | 周 (01-53) 星期一是一周的第一天,與 %x 使用 |
%W | 星期名 |
%w | 周的天 (0=星期日, 6=星期六) |
%X | 年,其中的星期日是周的第一天,4 位,與 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,與 %v 使用 |
%Y | 年,4 位 |
%y | 年,2 位 |