使用SQL-server 2008数据库,我有一个char(14)
数据类型,我想将其转换为日期时间。
示例char(14)值:
20120209102026
20010131120000
日期格式为某种yyyymmdd
。
似乎我发布的值不是唯一的格式,因为我得到一些值的“索引超出范围”错误。为此,我可以跳过那些无效日期。
答案 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
答案 2 :(得分:0)
一系列函数调用但结果相同。
试试这样:
select convert(datetime,STUFF(STUFF(STUFF(STUFF(STUFF('20010131120000',5,0,'/'),8,0,'/'),11,0,' '),14,0,':'),17,0,':'))
在此查看STUFF如何运作!