我有一个列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
答案 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