2013-12-17 31 views
0

我需要能夠輸入變量轉換爲datetime或標記 - 然後將其發送回設置爲select語句的一部分結果。我已經準備好下面這當然不工作的代碼 - 它向我發送1970-01-01不管UNIX是什麼時候了。這些都是我想發送到結果集的作品:我需要在結果打印變量設置

FROM_UNIXTIME(的startDate, 「%Y-%間%d」)AS STARTINGDATE, FROM_UNIXTIME(結束日期,「%Y-%間%d 「)作爲ENDINGDATE

CREATE PROCEDURE reportFreeCoolingTracker (
     IN fromDate varchar (50), 
     IN toDate varchar (50), 
     IN timeZone varchar (50)) 

    BEGIN 
      DECLARE startDate varchar (50); 
      DECLARE endDate varchar (50); 


      SET startDate = FROM_UNIXTIME(fromDate/1000); 
      SET endDate = FROM_UNIXTIME(toDate/1000); 

SELECT g.groupId, 
    g.name AS groupName, 
    g1.parentId AS parentId1, 
    g1.name AS group1Name, 
    g2.parentId AS parentId2, 
    g2.name AS group2Name, 
    g3.parentId AS parentId3, 
    g3.name AS group3Name, 
    l.logId,l.name AS logName, 
    l.ordering AS logOrder, 
    a.activityId AS activityId, 
    a.ordering AS activityOrder, 
    a.name AS activityName, 
    l1.recordId, 
    l1.started, l1.completed, 
    l1.userId,l1.note, 
    u.name, 
    TO_SECONDS(t2.completed) - TO_SECONDS(l1.completed) AS timeInSeconds, 
    substr(l.details, instr(l.details , ':') +1)AS charge,l.details, 
    i.itemId, 
    i.name AS itemName, 
    i.itemType, 
    i.details,l1.item31985,l1.item31987, 
    (l1.item31985 - l1.item31987) AS kwDifference, 
    ((l1.item31985 - l1.item31987) * (substr(l.details, instr(l.details , ':') +1))) AS cost, 
    (((l1.item31985 - l1.item31987) * (substr(l.details, instr(l.details , ':') +1))) 
    *(time_to_sec(timediff(t2.completed, l1.completed))/3600)) AS costT, 
     time_to_sec(timediff(t2.completed, l1.completed))/3600 AS coolingHours, 
     time_to_sec(timediff(endDate, startDate))/3600 AS totalTimeRange, 
    FROM_UNIXTIME(startDate,"%Y-%m-%d") AS startingDate, 
    FROM_UNIXTIME(endDate,"%Y-%m-%d") AS endingDate 

    FROM logs l 
     INNER JOIN groups g ON g.groupId = l.groupId 
     LEFT JOIN groups g1 ON g.parentId = g1.groupId 
     LEFT JOIN groups g2 ON g1.parentId = g2.groupId 
     LEFT JOIN groups g3 ON g2.parentId = g3.groupId     
     INNER JOIN activities a ON l.logId = a.logId 
     INNER JOIN log1644 l1 ON a.activityId = l1.activityId 
     INNER JOIN log1644 t2 ON t2.recordId = l1.recordid + 1 
     INNER JOIN items i ON l.logId = i.logId AND i.name LIKE '## KW%' 
     INNER JOIN users u ON l1.userId = u.userId AND i.name LIKE '## KW%' 
    WHERE i.itemID = "31985" AND l1.activityId = 1257 
     AND l1.started 
     BETWEEN startDate 
      AND endDate 
    ORDER BY l1.started; 
    END // 

DELIMITER ; 

回答

0

您必須刪除

SET startDate = FROM_UNIXTIME(fromDate/1000); 
SET endDate = FROM_UNIXTIME(toDate/1000); 

因爲Unix時間戳和毫秒的工作,並在您選擇使用作爲

FROM_UNIXTIME(fromDate,"%Y-%m-%d") AS startingDate, 
FROM_UNIXTIME(toDate,"%Y-%m-%d") AS endingDate 
0

這實際上做的工作 - 事實上,原來的查詢工作 - 我將它添加到錯誤的數據庫。

(CONVERT_TZ((FROM_UNIXTIME(FROM日期/ 1000)), 'UTC',的timeZone))AS STARTINGDATE, (CONVERT_TZ((FROM_UNIXTIME(TODATE/1000)), 'UTC',的timeZone))AS日期ENDINGDATE,