将数据类型Varchar转换为现有列

时间:2015-07-22 07:49:14

标签: sql-server visual-studio-2012

我在Stackoverflow中已经阅读了类似的文章,但我似乎无法在我的案例中使用它。

我的列名为(Date),数据类型为varchar,整个列中的数据如下所示(1999-12-31-23-00-01),没有括号。

因此,我想要相同的值,而不是Varchar,但是采用日期时间格式。

这是我的表结构:

CREATE TABLE App (

[ID] [int] IDENTITY(1,1)NOT NULL,

[Date] Varchar(50)NULL,

[Inst.nr] [smallint] NULL,

[Creator Initials] varchar NULL,

[AppOwner] varchar NULL,

[Status] varchar NULL,

[Serial.Nr] varchar NULL,

[MAC.Addr] varchar NULL,

[Dell.nr] varchar NULL,

[Model] varchar NULL,

[描述] varchar NULL,

[服务保修] [日期] NULL,

[已购买] [日期] NULL, )

实际上,问题不在于结构,它来自Excel文件的一些旧数据,它被导入到SQL数据库中。 在我的[Date]列中,现在在Varchar中,此列中的数据如下所示1999-12-31-23-00-01

如您所见,它看起来像日期时间格式,但它不接受从varchar到datetime的转换

2 个答案:

答案 0 :(得分:1)

不确定您是否要求转换为日期时间

SELECT 
  -- Convert using ISO date time yyyy-MM-dd hh:mm:ss
  CONVERT(datetime, 
          LEFT(Date, 10) + ' ' + 
          REPLACE(RIGHT(Date, 8), '-', ':')
         ) AS DateInDatetime
FROM
  (VALUES 
    -- assume format in yyyy-MM-dd-hh-mm-ss
    ('1999-12-31-23-00-01') 
  ) t (Date)

SQL Fiddle

答案 1 :(得分:0)

在Sql Server中使用CONVERT函数,转换为日期时间,遵循格式类型120

SELECT CONVERT(DATETIME,SUBSTRING('(1999-12-31-23-00-01)',2,10) + ' ' + REPLACE(SUBSTRING('(1999-12-31-23-00-01)',13,8),'-',':'),120)

希望这有帮助!