使用 SQL-server 2008 数据库,我有一个char(14)
要转换为日期时间的数据类型。
示例 char(14) 值:
20120209102026
20010131120000
日期格式是yyyymmdd
某种形式。
我发布的值似乎不是唯一的格式,因为某些值出现“索引超出范围”错误。为此,我可以跳过那些无效日期。
使用 SQL-server 2008 数据库,我有一个char(14)
要转换为日期时间的数据类型。
示例 char(14) 值:
20120209102026
20010131120000
日期格式是yyyymmdd
某种形式。
我发布的值似乎不是唯一的格式,因为某些值出现“索引超出范围”错误。为此,我可以跳过那些无效日期。
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)
这很难看,但如果您的格式是,yyyymmddhhmmss
那么您可以使用:
select cast(left(yourDate, 8)+' '+
SUBSTRING(yourDate, 9, 2)+':'+SUBSTRING(yourDate, 11, 2)+':'+RIGHT(yourDate, 2) as datetime)
from yourtable
一系列函数调用,但最终得到相同的结果。
试试这样:
select convert(datetime,STUFF(STUFF(STUFF(STUFF(STUFF('20010131120000',5,0,'/'),8,0,'/'),11,0,' '),14,0,':'),17,0,':'))
在这里查看STUFF的工作原理!