由於錯誤消息指示您無法將bigint轉換爲日期。
你需要做一些邏輯,將其轉化:
例如2016年4月10日將被存儲爲4102016,其中爲2016年12月10日將是12102016.還有一個字符的區別。
我的建議是:
- 備份數據,無論是我的複製表或進行備份。
- 創建一個包含pk和dob的臨時表。
- 將一個varchar列添加到臨時表並使用dobs填充它。 (chardate)
- 將原始表中的所有dobs設置爲null。
- 更改列上的數據類型爲止。
- 使用正確的邏輯在臨時表中對原始表運行更新以轉換日期。
這個邏輯會有所不同取決於你的日期格式,但爲美國(MM/DD/YYYY)將是這個樣子:
update emp_det1
set dob = case
when len(chardate) = 8
then convert(date,left(chardate,2)+'/'+substring(chardate,3,2)+'/'+right(chardate,4),101)
when len(chardate) = 7
then convert(date,'0'+left(chardate,1)+'/'+substring(chardate,2,2)+'/'+right(chardate,4),101)
from emp_det1
join #conv as conv
on emp_det1.pk = conv.pk
您可以更改皈依try_converts發現不合格的日期,我還建議在更新之前運行一些選擇語句,以確保數據在提交前看起來正確。
改變方式?你是指CAST還是ALTER TABLE?告訴我們你做了什麼。 – jarlh
@jarlh alter table這裏是我的查詢: ALTER TABLE emp_det1 ALTER COLUMN dob date; –
添加新的日期列。做更新複製並將現有的bigint日期轉換到新列。完成後,放棄舊列。也許重命名新列。 (在執行此操作之前檢查依賴關係!外鍵,索引,觸發器,視圖等) – jarlh