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)

概念是這樣:

  1. 先把 int 的 USER_DATE 欄位轉成 varchar,這樣才能轉成 datetime
  2. 再把變成 varchar 的 USER_DATE 變成 datetime,這樣才能做 DATEADD
  3. 因為我們要計算「兩年後是到期日,需要在到期日前一天提醒」,所以做兩次 DATEADD
  4. MySQL 的 date_format(時間, %Y%m%d) 要改用 CONVERT(varchar, 時間, 112)

 

 

arrow
arrow

    小攻城師 發表在 痞客邦 留言(0) 人氣()