Mysql DATE_SUB(NOW(),INTERVAL 1天)24小时或工作日?

ale*_*lex 16 mysql date sql-date-functions

我试图获得每天注册用户的数量.目前我正在使用它

$sql = "SELECT name, email FROM users WHERE DATE_SUB(NOW(), INTERVAL 1 DAY) < lastModified"
Run Code Online (Sandbox Code Playgroud)

但我不确定这是每天工作还是每24小时工作一次?

例如,22小时前注册的用户不应该像今天(=星期二)的用户一样返回

Sim*_*tal 27

lastModified可能是一个日期时间.要将其转换为日期,您只需将其包装在DATE()中即可DATE(lastModified).DATE()返回日期时间值的日期部分,该日期实际上是00:00.

SELECT
    name,
    email
FROM users
WHERE DATE(lastModified) = DATE( DATE_SUB( NOW() , INTERVAL 1 DAY ) )
Run Code Online (Sandbox Code Playgroud)

使用它来匹配a WHERE虽然效率很低,因为所有行都需要将DATE应用于它们,因此它可能会扫描整个表.比较lastModified您要查找的上限和下限更有效,在这种情况下> = 00:00 on SUBDATE(NOW(),INTERVAL 1 DAY)和<00:00 onNOW()

因此,您可以使用BETWEEN进行选择,提供以下内容.

SELECT
    name,
    email
FROM users
WHERE lastModified 
    BETWEEN DATE( DATE_SUB( NOW() , INTERVAL 1 DAY ) )
    AND DATE ( NOW() )
Run Code Online (Sandbox Code Playgroud)


Flo*_*ris 9

我想你需要

SELECT
    name,
    email
FROM users
WHERE DATE(lastModified) = DATE( NOW() )
Run Code Online (Sandbox Code Playgroud)

这实际上"仅舍入到日期",因此仅匹配"自午夜以来"的记录.