Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL将整数转换为日期时间_Sql_Sql Server_Tsql_Datetime - Fatal编程技术网

SQL将整数转换为日期时间

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,但无法使其适应我的要

我有一个具有以下整数格式的fetchtime列的表:

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日期时间格式。