DB2中的sqlserver查询

DB2中的sqlserver查询,db2,db2-400,Db2,Db2 400,全部,, 我有个问题。我有一个在SQLServerDB中运行良好的查询。要在DB2中运行同样的程序,需要做什么 SELECT EMPID ,TOTALSECONDS /3600 AS Hours ,((TOTALSECONDS % 3600) /60) AS Minutes ,(TOTALSECONDS % 60) AS Seconds ,STATUS ,[DATE] FROM (SELECT SUM(DATEDIFF

全部,, 我有个问题。我有一个在SQLServerDB中运行良好的查询。要在DB2中运行同样的程序,需要做什么

SELECT 

     EMPID
    ,TOTALSECONDS /3600 AS Hours
    ,((TOTALSECONDS % 3600) /60) AS Minutes
    ,(TOTALSECONDS % 60) AS Seconds
    ,STATUS
    ,[DATE]
    FROM
    (SELECT
    SUM(DATEDIFF(ss,STARTDATETIME,ENDDATETIME)) AS TOTALSECONDS,
    EMPID,STATUS,
    CONVERT(VARCHAR,STARTDATETIME,10) AS [DATE]
    FROM <TABLE>
    WHERE CONVERT(DATE,STARTDATETIME) = 'xxxx-xx-xx'
    GROUP BY EMPID,STATUS,CONVERT(VARCHAR,STARTDATETIME,10)) AS SUMMARY
    ORDER BY STATUS,DATE

谢谢。

您的问题是DB2没有DATEDIFF或CONVERT函数。也有类似的分别称为和

我认为这个查询将是您想要的,但我不能100%确定是否已将SQL Server格式正确地转换为DB2格式:

SELECT
     EMPID
    ,TOTALSECONDS /3600 AS Hours
    ,(MOD(TOTALSECONDS, 3600) /60) AS Minutes
    ,(MOD(TOTALSECONDS, 60) AS Seconds
    ,STATUS
    ,DATE
FROM (
    SELECT
         SUM(TIMESTAMPDIFF(2, CHAR(ENDDATETIME-STARTDATETIME))) AS TOTALSECONDS
        ,EMPID
        ,STATUS
        ,VARCHAR_FORMAT(STARTDATETIME,'mm-dd-yy') AS DATE
    FROM <TABLE>
    WHERE VARCHAR_FORMAT(STARTDATETIME,'yyyy-mm-dd') = 'xxxx-xx-xx'
    GROUP BY
         EMPID
        ,STATUS
        ,VARCHAR_FORMAT(STARTDATETIME,'mm-dd-yy')
) A
ORDER BY
     STATUS
    ,DATE

百分比是否相同。它在charracter%上的给定错误无效。哦,%不是DB2的模运算符,您需要该函数。我已经更新了答案。好的,问题解决了。但现在错误是发现了意外的[DATE]。但是date似乎是正确的DB2的正确转义字符是双引号,但我认为您实际上不需要它,您可以在DB2中调用列date而不必转义它。我再次更新了答案:非常感谢。实际上我把它改成了,DT而不是Date。。现在工作正常了。。更改了所有HRS、MTS、SDS和DT。非常感谢你的帮助。如果这是。。。您的时间戳不会附加时区。它们是否存储在UTC中?如果没有,存储时区是否经历DST?见鬼,你确定所有的时间戳都被规范化了,都在同一个区域吗?我在一个系统上工作过,那里的条目显然来自未来!?开始时间和结束时间的范围是多少?您是否需要担心DST发生的时间变化?我记不清确切时间,但我认为系统不会记住一个区域的多个DST转换日期。。。。