SQL将整数转换为日期时间
我有一个具有以下整数格式的fetchtime列的表:SQL将整数转换为日期时间,sql,sql-server,tsql,datetime,Sql,Sql Server,Tsql,Datetime,我有一个具有以下整数格式的fetchtime列的表: 20100903063110 20110403022433 20130203142033 20130103153313 等等。其中是一起的日期和时间yyyymmddhms 我需要将此列中的所有记录转换为SQL Server日期时间格式:YYYY-MM-DD HH:MI:SS 完成后,我想分别提取转换后的日期和时间格式,并将其存储在同一表的两个新列中 在查找时,我发现下面提到的转换使用@Andomar的substring,但无法使其适应我的要
20100903063110
20110403022433
20130203142033
20130103153313
等等。其中是一起的日期和时间yyyymmddhms
我需要将此列中的所有记录转换为SQL Server日期时间格式:YYYY-MM-DD HH:MI:SS
完成后,我想分别提取转换后的日期和时间格式,并将其存储在同一表的两个新列中
在查找时,我发现下面提到的转换使用@Andomar的substring,但无法使其适应我的要求
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
Jain,看起来你在试图根据自己的情况修改代码。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字段存储为整数,理论上可能会出现问题:可能无法处理该数据类型。要解决这个问题,可以将值强制转换为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
convert/substr有什么问题?它看起来像是做了你想做的事情?虽然值可能会同时存储为数字类型,但为了转换的目的,该数字没有有意义的日期/时间表示。为此,需要将其视为字符串。从子字符串构造日期/时间的现有方法似乎是合理的。@AlexK。谢谢你的回复。是的,它仅转换“20100101000000”值。我怎样才能用它来转换专栏中的所有记录呢?非常感谢你,你救了我一天。这就是我想要的:现在我已经将列的所有值转换为SQL日期时间格式。