0

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

示例 char(14) 值:

20120209102026
20010131120000

日期格式是yyyymmdd某种形式。

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

4

3 回答 3

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)
于 2012-11-13T18:14:18.730 回答
1

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

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

请参阅带有演示的 SQL Fiddle

于 2012-11-13T18:15:18.897 回答
0

一系列函数调用,但最终得到相同的结果。

试试这样:

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

在这里查看STUFF的工作原理!

于 2012-11-13T18:43:33.410 回答