close
原本有一段在 MySQL 上轉換日期的運算:
date_format(DATE_SUB(DATE_ADD(USER_DATE, INTERVAL 2 YEAR), INTERVAL 1 DAY), '%Y%m%d')
移轉到 MSSQL 之後要做以下加工:
- date_format() 得換成指定時間字串型態的 convert()
- DATE_SUB() 與 DATE_ADD() 要換成 DATEADD()
不過不知為何,一直出現錯誤訊息「轉換 expression 到資料類型 datetime 時發生算術溢位錯誤」(Error Arithmetic overflow error converting expression to data type datetime)。
後來發現一個超基本款的問題:
要做日期轉換時,我們原本的 USER_DATE 欄位是開成 bigint,得先把它 convert 成 varchar,才能開始換算日期!
所以後來在 MSSQL 改成:
CONVERT(varchar, DATEADD(DAY, -1, DATEADD(YEAR, 2, CAST(CAST(USER_DATE as varchar) as datetime))), 112)
概念是這樣:
- 先把 int 的 USER_DATE 欄位轉成 varchar,這樣才能轉成 datetime
- 再把變成 varchar 的 USER_DATE 變成 datetime,這樣才能做 DATEADD
- 因為我們要計算「兩年後是到期日,需要在到期日前一天提醒」,所以做兩次 DATEADD
- MySQL 的 date_format(時間, %Y%m%d) 要改用 CONVERT(varchar, 時間, 112)
文章標籤
全站熱搜
留言列表