mysql - 我需要在结果集中打印变量

标签 mysql

我需要能够将输入变量转换为日期时间或时间戳 - 然后将其作为 select 语句的一部分发送回结果集。我准备了下面的代码,当然它不起作用 - 无论 Unix 时间是什么,它都会向我发送 1970-01-01 。这些是我尝试发送到结果集的片段:

FROM_UNIXTIME(startDate,"%Y-%m-%d") AS 起始日期, FROM_UNIXTIME(endDate,"%Y-%m-%d") AS 结束日期

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 ;

最佳答案

你必须删除

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

因为 unix 时间戳以毫秒为单位,并在 SELECT 中使用为

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

关于mysql - 我需要在结果集中打印变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20628990/

相关文章:

mysql - 如何在 HIbernate 中批量更新

php - 在 mySQL 中搜索包含来自 mysql_real_escape_string() 的斜杠的名称

php - mysql dump 生成一个空白的sql文件

mysql - 难以理解简单的子查询

php - 调整mysql查询以从日期中过滤掉今天

php - 正确的连接语法

java - 使用 JDBC 从数据库中提取并创建数组

javascript - 如何获取使用 $.ajax 返回的 MySQL 查询结果

php - 无法在服务器中插入信息,但我可以作为本地主机

java - 如何在Java/MySQL中查询继承的类类型?