从单独的日期和时间字段转换为DATETIME

时间:2011-09-04 14:33:22

标签: sql sql-server datetime

我公司的工作场所有一个MYSQL数据库,时间戳通常存储如下:

ModDate  |  ModTime  |  Other fields
------------------------------
20110405 |  203055   |  .....
20110506 |  214016   |  .....

我确信当时可能有一个合理的理由(开发人员已离开),但我们现在主要使用SQL Server。

我已经编写了一个查询来将ModDate字段转换为标准DATETIME,但显然我总是将时间设为00:00:00

如何从SQL Server中获取有效的DATETIME对象,该对象组合了ModTimeModDate字段,以便获得组合正确的值?注意,我已经将它们提取到本地结果集中,我无意更改MYSQL数据库(我只是用OPENQUERY从中提取)。

4 个答案:

答案 0 :(得分:3)

假设该表现在在SQL Server中,并且该问题与MySQL无关。

UPDATE dbo.TableName
    SET ModDate = CONVERT(DATETIME, 
    CONVERT(CHAR(8), ModDate, 112) + ' ' 
    + STUFF(STUFF(ModTime,3,0,':'),6,0,':'));

如果你想先确定它是正确的,只需运行:

SELECT
    ModDate, ModTime, NewModDate = CONVERT(DATETIME, 
    CONVERT(CHAR(8), ModDate, 112) + ' ' 
    + STUFF(STUFF(ModTime,3,0,':'),6,0,':'))
FROM dbo.TableName;

答案 1 :(得分:1)

如果你确实在寻找一个MySQL解决方案,这将符合法案,假设YYYYMMDD和HHMMSS:

update yourtable set datetimecol =
    cast(concat(substring(moddate,1,4),'-', 
     substring(moddate,5,2),'-',
     substring(moddate,7,2),' ', 
     substring(modtime,1,2),':', 
     substring(modtime,3,2),':', 
     substring(modtime,5,2)) as datetime) 

如果您不想保留数据,那么只需执行选择,而不是更新,如下所示:

select cast(concat(substring(moddate,1,4),'-', 
     substring(moddate,5,2),'-',
     substring(moddate,7,2),' ', 
     substring(modtime,1,2),':', 
     substring(modtime,3,2),':', 
     substring(modtime,5,2)) as datetime) as DateTimeCol
from yourtable

答案 2 :(得分:0)

...假设20110405是2011年4月5日,并且您有一个名为datetimecol的新列,您可以这样做:

update yourtable set datetimecol =
    convert(datetime, substring(moddate,1,4) + '-' + 
     substring(moddate,5,2) + '-' +
     substring(moddate,7,2)+ ' ' + 
     substring(modtime,1,2) + ':' + 
     substring(modtime,3,2) + ':' + 
     substring(modtime,5,2)) 

答案 3 :(得分:0)

要将时间部分添加到datetime列:您可以使用TIME_TO_SEC查询MySQL以返回总秒数,然后在MSSQL中使用DATEADD

这样的事情:

UPDATE <TABLE>
SET <datetime column> = DATEADD(second, <MYSQL_QUERY>.TOTAL_SECONDS, <datetime column>)
FROM <TABLE>
INNER JOIN <MYSQL_QUERY> ON <TABLE>.<KEY> = <MYSQL_QUERY>.<KEY>

&lt; MYSQL_QUERY&gt;是:

SELECT <KEY>,TIME_TO_SEC(MOD_TIME) FROM ...

我不确定你是否可以在连接中使用OpenQuery,但我很肯定它会起作用。如果OpenQuery不能使用连接,那么可以将查询结果存储到MSSQL中的临时表中。