MySQL 欄位 日期欄位延展到 N 個月底
需求 將 DB 的一個欄位的時間全部延展到 N 個月的月底
SQL
1 | DATE_ADD(datetime, INTERVAL expr unit) |
unit 參數可使用的值
比較常用的 其他就自己去看文件吧
- YEAR
- MONTH
- WEEK
- DAY
- HOUR
- MINUTE
- SECOND
範例
1 | UPDATE `Table` SET column = DATE_ADD(column, INTERVAL 1 MONTH) |
也可以使用 負數來達到跟DATE_SUB一樣的效果
1 | UPDATE `table` SET column = DATE_ADD(column, INTERVAL -1 MONTH) |
遇到問題
問題 1
當欄位的值為小月/2月只有28,29天時,加上一個月會造成只加 month,day 並不會為最後一日
2021-11-30 => 2021-12-30
的情況
SQL
1 | LAST_DAY(date) |
合併後為
1 | UPDATE `table` SET Column = LAST_DAY(DATE_ADD(column, INTERVAL 1 MONTH)) |
問題 2
原先的數值為 2021-11-30 23:59:59 但 變成 2021-12-31 00:00:00
合併後為
1 | UPDATE `table` SET column = LAST_DAY(DATE_ADD(column, INTERVAL 1 MONTH)) + INTERVAL 1 DAY - INTERVAL 1 SECOND |
參考網站:
https://www.w3school.com.cn/sql/func_date_add.asp
https://www.w3schools.com/sql/func_mysql_last_day.asp
https://stackoverflow.com/questions/11617120/get-last-second-of-a-date-in-mysql
如果這一篇文章有幫助到你的話,
請您幫忙點選廣告,都是以不擾人與不強迫的方式呈現