簡體   English   中英

將列從varchar轉換為datetime並在表中更新

[英]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 insertBulk 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM