【问题标题】:Check if one unix_timestamp is greater than another检查一个 unix_timestamp 是否大于另一个
【发布时间】:2017-07-18 02:19:13
【问题描述】:

我已经构建了这个 SQL 查询,它应该将最高日期值放在 field_result 中,但它没有按预期工作。

SELECT
    field_one,
    field_two,
    IF(((field_one IS NOT NULL AND field_one <> '') AND
        (field_one > TableB.field_two)),
       unix_timestamp(field_one),
       unix_timestamp(TableB.field_two)) AS result
FROM TableA
LEFT JOIN TableB ON TableB.id = TableA.id

条件很简单。

  • field_one 必须存在,并且包含某种值。
  • 如果field_one &gt; field_two 显示field_one 否则显示field_two

它产生结果

"field_one", "field_two", "field_result"
"1495681346","1500328106","1500328106"
"1500342725","1500328106","1500328106"
"1499922505","1500329807","1500329807"
"1500343148","1500328106","1500328106"
"1500329593","1500328106","1500328106"

由于某种原因,row 2 上的field_result 的值不是1500342725(这个值大约是14619 大于1500328106)。

我认为我的语法正确,但我不确定,因为结果不是我所期望的

【问题讨论】:

  • 请清理您的查询并给我们一个可重现的例子。

标签: mysql if-statement field


【解决方案1】:

如果您想查找两个字段中较大的一个,请考虑使用 MySQL 的 GREATEST() 函数。

SELECT
    field_one,
    field_two,
    GREATEST(COALESCE(UNIX_TIMESTAMP(field_one), -1),
             COALESCE(UNIX_TIMESTAMP(field_two), -1)) AS result
FROM TableA

【讨论】:

  • 这不是我给你的查询。两个字段列的类型是什么?它们是日期类型吗?
  • 给我一个可重现的例子。
  • 我创建了一个fiddle,您的示例实际上是正确的,我在已格式化的时间戳field 上运行unx_timestamp(从而导致不正确的结果)。非常感谢。
猜你喜欢
  • 2011-04-19
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
相关资源
最近更新 更多