字串 年月 轉 日期格式 年月日( 字串轉日期 )

最近工作上又遇到了奇葩的需求,通常我們在需求分析的時候就會確認欄位的格式,以本案例來說 因為有年月的統計需求,日期格式又沒有年月;所以小編在問清楚不會異動此欄位後,自以為聰明的以字串方式儲存年月欄位(’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’,’欄位名稱 或 子查詢’)。每個字串中間就是加逗號即可整個串成一個字串。

你可能會喜歡

喜歡我的文章嗎?歡迎按讚加分享,
或是點擊站內廣告讚助,讓本站能常久經營下去;造福廣大網友。

Leave a comment

你的電子郵件位址並不會被公開。 必要欄位標記為 *