Mysql DATE_SUB(NOW(), INTERVAL 1 DAY) 24 hours or weekday?

前端 未结 2 933
攒了一身酷
攒了一身酷 2020-12-14 08:47

I am trying to get the totaal amount of registerd users per day. At the moment i am using this

$sql = \"SELECT name, email FROM users WHERE DATE_SUB(NOW(), I         


        
相关标签:
2条回答
  • 2020-12-14 09:34

    lastModified is, presumably, a datetime. To convert this into a date you can simply wrap it in DATE() i.e. DATE(lastModified). DATE() returns the date part of a datetime value which is effectively 00:00 on that day.

    SELECT
        name,
        email
    FROM users
    WHERE DATE(lastModified) = DATE( DATE_SUB( NOW() , INTERVAL 1 DAY ) )
    

    Using this to match a WHERE though would be inefficient as all rows would require DATE applied to them and so it would probably scan the whole table. It is more efficient to compare lastModified to the upper and lower bounds you are looking for, in this case >= 00:00 on SUBDATE(NOW(),INTERVAL 1 DAY) and < 00:00 on NOW()

    Therefore you can use BETWEEN to make your select giving the following.

    SELECT
        name,
        email
    FROM users
    WHERE lastModified 
        BETWEEN DATE( DATE_SUB( NOW() , INTERVAL 1 DAY ) )
        AND DATE ( NOW() )
    
    0 讨论(0)
  • 2020-12-14 09:36

    I think you need

    SELECT
        name,
        email
    FROM users
    WHERE DATE(lastModified) = DATE( NOW() )
    

    This effectively "rounds to the date only" and will therefore only match records "since midnight".

    0 讨论(0)
提交回复
热议问题