[英]Convert column from varchar to datetime and update it in the table
我有一個與varchar轉換為datetime有關的問題。 SQL Server將Varchar轉換為Datetime的線程中已經介紹了該主題,但是我想進一步介紹它。
我已經對以VARCHAR(255)
為目的地的預定義表進行了BULK INSERT
。 我有一個表dbo.USR_02_ALL_RAW
和字段GLTGB
,其中包含以下格式的字符串: 07/16/2016
。
我可以通過以下代碼將其轉換為單個字符串:
DECLARE @Date varchar(255)
set @Date= '07/16/2016'
SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,4,2))
它給了我一個結果:
2016-07-16 00:00:00.000
但是我想將表dbo.USR_02_ALL_RAW
的整個字段GLTGB
傳遞給代碼,將其從VARCHAR
轉換為DATETIME
並使用這些結果更新字段GLTGB
。(將整個字段從varchar
轉換為datetime
)
謝謝!
如果將值轉換為日期時間,則用該值更新來自它的同一數據庫列,然后,由於該列仍為varchar
,SQL將不得不再次將該值轉換回varchar以便存儲它。 因此,使用這種簡單方法無法獲得任何有用的東西。
如果您想實際更改列的數據類型,並轉換所有值,那么我認為您需要經歷以下過程:
1)在表格中創建一個新的varchar
列(這將是臨時的)
2)將所有數據值從GLTGB
列復制到新列中(使用UPDATE語句)
3)刪除GLTGB
列
4)使用相同名稱但使用datetime
類型重新創建它
5)使用UPDATE語句從臨時列中重新填充新的GLTGB
列
6)最后,刪除臨時列
可能有一種更簡單的方法,但這似乎是顯而易見的過程。
首先清除此內容,您要Bulk insert
或Bulk update
。 由於您已經具有GLTGB
列。 如果只想更新值。
update tab set GLTGB =
CONVERT(datetime,RIGHT(GLTGB,4)+LEFT(GLTGB,2)+SUBSTRING(GLTGB,4,2))
要么
如果要將字段從varchar
更新為datetime
。 然后過程有點冗長。
Alter table tab add newcol datetime --- Add new datetime type column
update tab set newcol =
CONVERT(datetime,RIGHT(GLTGB,4)+LEFT(GLTGB,2)+SUBSTRING(GLTGB,4,2)) --- update value in new column
Alter table tab drop column GLTGB --- drop GLGTB column
Alter table tab add GLGTB datetime --- add GLGTB column as datetime type
update tab set GLGTB = newcol --- update value from GLGTB from newcol
Alter table tab drop column newcol ---- remove unnecessary newcol
您可以使用以下代碼進行更新,但在此之前, you need to change the data type of your field to DateTime
update dbo.USR_02_ALL_RAW
set GLTGB=cast(CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,4,2)) as datetime)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.