代码之家  ›  专栏  ›  技术社区  ›  letsCode

最近30天从数据库表中选择*不会返回所有元素

  •  0
  • letsCode  · 技术社区  · 5 年前

    对于Android,日期是这样保存的 Fri Apr 12 10:16:01 EDT 2019 在iOs上,它是这样保存的 2019-10-16 00:27:12 0000 .

    SELECT *
    FROM appsearch
    WHERE username = '$userID' and
           date >= CURRENT_DATE - INTERVAL 200 DAY
    ORDER BY date DESC
    

    它不会从Android搜索中获取项目,只有IOS。我怎么能把两者都拉出来?我知道修复API会是最好的,但我已经过去了。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Nick    5 年前

    由于Android日期的格式无法与MySQL日期进行比较,因此必须首先转换它们。你可以用 STR_TO_DATE 为此,使用 LEFT RIGHT 要剪切字符串的日、月和年部分,请执行以下操作:

    SELECT *
    FROM appsearch
    WHERE username = 1 AND
          (DATE(date) >= CURRENT_DATE - INTERVAL 200 DAY OR
           STR_TO_DATE(CONCAT(LEFT(date, 10), RIGHT(date, 4)), '%a %b %e %Y') >= CURRENT_DATE - INTERVAL 200 DAY
           )
    ORDER BY COALESCE(DATE(date), STR_TO_DATE(CONCAT(LEFT(date, 10), RIGHT(date, 4)), '%a %b %e %Y')) DESC
    

    Demo on dbfiddle

    笔记

    1. 截止日期 要求格式字符串中的文字字符完全匹配,因此您可能需要多个不同的格式字符串(例如 EDT PST ,等等)来转换它们。
    2. 你需要换个房间 ORDER BY 子句使用 date 中正在使用的值 WHERE