【问题标题】:mysql assignment within function函数内的mysql赋值
【发布时间】:2013-01-28 10:54:51
【问题描述】:

我有一个包含 DATETIME 列的历史记录表。不能在 DATEDIFF 函数中分配变量吗?以下声明:

SET @LASTDATETIME='2000-01-01 00:00:00';
SELECT DATETIME, @LASTDATETIME, TIMEDIFF(DATETIME, @LASTDATETIME:=DATETIME) AS CALC, @LASTDATETIME FROM HISTORY

结果如下:

|DATETIME           |@LASTDATETIME       | CALC    | @LASTDATETIME
-------------------------------------------------------------------
2013-01-28 12:11:41 |2000-01-01 00:00:00 |00:00:00 |[BLOB - 19 B]
2013-01-28 12:11:44 |2013-01-28 12:11:41 |00:00:00 |[BLOB - 19 B]

我不明白为什么看起来分配有点像 DATETIME 被结转到下一条记录,但是 CALC 字段失败,并且在分配之后 @LASTDATETIME 的值是一个 BLOB?为什么这不符合我的预期?

感谢您的帮助。

【问题讨论】:

    标签: mysql variables variable-assignment datediff


    【解决方案1】:

    试试这个:

    SELECT @last AS `last`,
           TIMEDIFF(`datetime`, @last) AS `difference`,
           @last := `datetime` AS `current`
    FROM history, (SELECT @last :='2000-01-01 00:00:00') n
    

    这里是sqlfiddle

    【讨论】:

    • 那行得通。我实际上想要做的是根据 DATEDIFF 更新表,所以据我所知,我需要在函数中更改 @last。我正在尝试更新名为tripid 的列,如果时间戳超过最后一条记录中的时间戳10 分钟以上,则tripid 会递增,否则该记录被视为同一行程的一部分。这是一个小提琴:sqlfiddle(希望这有效,抱歉,新手)
    猜你喜欢
    • 2018-07-08
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多