字串 年月 轉 日期格式 年月日( 字串轉日期 )
最近工作上又遇到了奇葩的需求,通常我們在需求分析的時候就會確認欄位的格式,以本案例來說 因為有年月的統計需求,日期格式又沒有年月;所以小編在問清楚不會異動此欄位後,自以為聰明的以字串方式儲存年月欄位(’201811’),就在系統上線後的幾個月後,突然說要改成年月日(翻桌),裡面已經有不少資料了;又不可能重新輸入,varchar => date 是會被清空資料變 0000-00-00,但這是嚇不了我的
打滾那麼多年什麼妖魔鬼怪沒碰過,以下分享我的解法:
有更好的解法歡迎分享,有錯也請多多指教
怕死的我先驗證一下這作法可不可行
1.先把年月切割顯示出來
sql語法:SELECT *, SUBSTRING(`ym`,1,4) as y,SUBSTRING(`ym`,5,2) as m FROM `table` WHERE 1
2.再組合一下切割出來的字串讓它變成合法的日期格式
sql語法:SELECT concat(SUBSTRING(`ym`,1,4),’-‘,SUBSTRING(`ym`,5,2),’-01′) as cc FROM `table` WHERE 1
3.建立新的欄位 `ymd`
4.將完整的日期格式寫入 `ymd`
sql語法:UPDATE `table` SET `ymd`=concat(SUBSTRING(`ym`,1,4),’-‘,SUBSTRING(`ym`,5,2),’-01′) WHERE 1
5.將 `ymd` 的資料寫入原本的 `ym` (其實是可以直接用 `ymd` 但我報表都寫好了不想改了)
sql語法:UPDATE `table` SET `ym`=`ymd`
6.刪除 `ymd` 欄位
打完收工!~
經過此次經驗,以後有年月的統計需求 統一都設為日期格式,就算前端只顯示年月寫入時再補 01 這個日期;
免得又被背後桶一刀。
補充:上面會用到兩個mysql的功能函式
SUBSTRING(`ym`,1,4) 分割字串(’要分割的字串 可以純字串 或 欄位名稱 或 子查詢’,從那裡開始分割,要分割的長度)。
concat(‘2019′,’-‘,’01’,’-01′) 字串相加 (‘字串1′,’字串2’,’欄位名稱 或 子查詢’)。每個字串中間就是加逗號即可整個串成一個字串。
[ Mysql ] – 字串 年月 轉 日期格式 年月日( 字串轉日期 )
評等結果
點擊便能為這篇文章進行評等!
[評等總次數: 0,平均評等: 0]
評等結果
點擊便能為這篇文章進行評等!
[評等總次數: 0,平均評等: 0]