內容目錄
簡介
今天開發中,做一個功能需要對歷史數據進行補充,相信大家也遇到過這樣的情況,這個歷史數據需要按月份和人的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 位 |
