SQL convert int to datetime overflow issue

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

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

img_1

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

再來再透過

1
convert(datetime,‘文字時間’)

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

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

完整的語法與結果如下

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

img_2

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

img_3