SQL将整数转换为DateTime

时间:2014-10-20 15:14:00

标签: sql sql-server tsql datetime

我有一个列fetchtime的表格,格式如下:

20100903063110
20110403022433
20130203142033
20130103153313

等等。那里的日期和时间一起(YYYYMMDDHHMISS

我需要将此列中的所有记录转换为SQL Server DateTime格式:YYYY-MM-DD HH:MI:SS

完成后,我想分别提取转换后的日期和时间格式,并将其存储在同一个表的两个新列中。

在寻找这个时,我发现@Andomar使用子字符串进行了下面提到的转换,但无法根据我的要求进行调整。

select  
   convert(datetime, substring(sub.Dt,1,4) + '-' + 
                     substring(sub.Dt,5,2) + '-' + 
                     substring(sub.Dt,7,2) + ' ' +
                     substring(sub.Dt,9,2) + ':' + 
                     substring(sub.Dt,11,2) + ':' + 
                     substring(sub.Dt,13,2))
from      
    (select  '20100101000000' as Dt) sub

1 个答案:

答案 0 :(得分:0)

Jain,看起来您正在尝试根据自己的情况调整代码in the answer here。 Andomar所做的是从子查询中选择仅包含单个值的信息,因为他无法访问原始海报的源和表。这样做可以让每个人都可以运行和查看它,无论他们碰巧拥有什么样的数据库模式。

将类似的内容改编为您自己的代码非常简单:只需用您自己的值替换alias.column引用(此处为sub.Dt),并将您的表放在FROM子句中子查询。因此,如果您的表名为SomeTable,并且您的列名为FetchTime,则查询将变为:

select  
   convert(datetime, substring(SomeTable.FetchTime,1,4) + '-' + 
                     substring(SomeTable.FetchTime,5,2) + '-' + 
                     substring(SomeTable.FetchTime,7,2) + ' ' +
                     substring(SomeTable.FetchTime,9,2) + ':' + 
                     substring(SomeTable.FetchTime,11,2) + ':' + 
                     substring(SomeTable.FetchTime,13,2))
from      
    SomeTable 

如果您的FetchTime字段存储为整数,理论上可能会出现问题:SUBSTRING()可能无法对该数据类型起作用。要解决这个问题,您可以将值CAST()设置为varchar,如下所示:

select  
   convert(datetime, substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),1,4) + '-' + 
                     substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),5,2) + '-' + 
                     substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),7,2) + ' ' +
                     substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),9,2) + ':' + 
                     substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),11,2) + ':' + 
                     substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),13,2))
from      
    SomeTable 

或者,如果您只是在单个值之后,您可以返回原始查询并简单地写:

select  
   convert(datetime, substring(sub.Dt,1,4) + '-' + 
                     substring(sub.Dt,5,2) + '-' + 
                     substring(sub.Dt,7,2) + ' ' +
                     substring(sub.Dt,9,2) + ':' + 
                     substring(sub.Dt,11,2) + ':' + 
                     substring(sub.Dt,13,2))
from      
    (select  CAST(FetchTime AS VARCHAR(20)) as Dt FROM SomeTable) sub