[SQL]Convert int to datetime(轉換 expression 到資料類型 datetime 時發生算術溢位錯誤)

摘要:[SQL]Convert int to datetime(轉換 expression 到資料類型 datetime 時發生算術溢位錯誤)

今天在幫客戶新增一個功能的時候看到前人把生日分為三個欄位(民國年,月與日),應該是歷史包袱或效果考量吧..

直覺上看到這個,直覺上就把它用數學解成(1911+year)*10000+month*100+day ,以74 10 19來說就會變成 19851019這樣的數字

再來再透過

 convert(datetime,‘文字時間’)

可以把文字轉換成時間格式,所以我們取得的數字轉成文字就可以

CONVERT(VARCHAR(8),((birthyear+1911)*10000+birthmonth*100+birthday))

完整的語法與結果如下

select gicuitem as id,convert(datetime,CONVERT(VARCHAR(8),((birthyear+1911)*10000+birthmonth*100+birthday))) as'西元年月日'  from testTable

*注意歐!日期時間比對在非閏年的2/29 比對會發生問題(如果1973/2/29 就會發生下面的問題)


如果覺得文章還不錯麻煩請在文章最上面給予推薦,你的支持是小弟繼續努力產出的動力!