sql-server:将Char(14)转换为Datetime?

时间:2012-11-13 18:08:54

标签: sql-server date datetime

使用SQL-server 2008数据库,我有一个char(14)数据类型,我想将其转换为日期时间。

示例char(14)值:

20120209102026
20010131120000

日期格式为某种yyyymmdd

似乎我发布的值不是唯一的格式,因为我得到一些值的“索引超出范围”错误。为此,我可以跳过那些无效日期。

3 个答案:

答案 0 :(得分:1)

declare @c char(14)
select @c='20120209102026'

Select Cast(Substring(@c,1,8) + ' ' + Substring(@c,9,2)+':'+ 
    Substring(@c,11,2)+':'+ Substring(@c,13,2) as DateTime)

忽略超出范围的数值的第二个版本:

Select Cast( 
Rtrim(Substring(@c,1,8) 
+ Case When len(Substring(@c,9,4))>=4 then +' '+ Substring(@c,9,2) else '' end
+ Case When len(Substring(@c,11,2))=2 then +':'+ Substring(@c,11,2) else '' end
+ Case When len(Substring(@c,13,2))=2 then +':'+ Substring(@c,13,2) else '' end)
as Datetime)

答案 1 :(得分:1)

这很难看,但如果您的格式为yyyymmddhhmmss,那么您可以使用:

select cast(left(yourDate, 8)+' '+
    SUBSTRING(yourDate, 9, 2)+':'+SUBSTRING(yourDate, 11, 2)+':'+RIGHT(yourDate, 2) as datetime)
from yourtable

请参阅SQL Fiddle with Demo

答案 2 :(得分:0)

一系列函数调用但结果相同。

试试这样:

select convert(datetime,STUFF(STUFF(STUFF(STUFF(STUFF('20010131120000',5,0,'/'),8,0,'/'),11,0,' '),14,0,':'),17,0,':'))

在此查看STUFF如何运作!