将nvarchar列更改为Date格式

Djb*_*ril -7 sql t-sql sql-server-2008

我有一个名为DT_APP包含两种格式的日期的列

  1. Sep 4 2012 6:19PM
  2. 2013-04-30 23:38.34

我需要在列中将1)转换为2)但我需要它nvarchar(19)在数据类型中nvarchar(19).

我很欣赏它应该是Datetime格式化但它被设置为nvarchar(19).

谢谢,

Lam*_*mak 6

因此,假设这些是列的唯一两种格式,那么您可以执行以下操作:

SELECT CONVERT(NVARCHAR(19),CONVERT(DATETIME,DT_APP,100),120)
FROM YourTable
WHERE DT_APP LIKE '%[aA-zZ]%'
Run Code Online (Sandbox Code Playgroud)

更新

好的,如果你想要另一个列,那么你可以先创建它然后填充值:

-- First create a new column
ALTER TABLE YourTable
ADD DT_APP2 DATETIME;

-- Fill that column with DATETIME values
UPDATE YourTable
SET DT_APP2 =   CASE WHEN DT_APP LIKE '%[aA-zZ]%'
                THEN CONVERT(DATETIME,DT_APP,100)
                ELSE CONVERT(DATETIME,DT_APP,120) END
Run Code Online (Sandbox Code Playgroud)

之后,您可以检查列以查看值是否正确,然后才应删除该DT_APP列.

更新2 如果您只需要更新当前值,那么只需执行以下操作:

UPDATE YourTable
SET DT_APP = CONVERT(NVARCHAR(19),CONVERT(DATETIME,DT_APP,100),120)
WHERE DT_APP LIKE '%[aA-zZ]%'
Run Code Online (Sandbox Code Playgroud)