在SQL(MySQL)中返回基于今天日期的查询结果

时间:2012-07-15 14:42:45

标签: mysql sql where-clause

我有一个查询,我得到了帮助,但我被困在另一点。

我的代码是

SELECT a.name, COUNT(*) AS num FROM table2 b 
INNER JOIN table1 a 
ON b.status_id=a.id 
GROUP BY status_id

我现在要做的只是显示当前日期输入的结果?日期列位于表2中。日期列的格式是日期和时间(例如1341241153),它以这种方式由CRM自动设置。我不确定这是什么格式!

我只需要检查日期是否与当天匹配。我希望这很清楚。

这是一个MySQL数据库。

感谢您的任何帮助!

3 个答案:

答案 0 :(得分:3)

使用此解决方案:

SELECT     a.name, COUNT(*) AS num
FROM       table2 b
INNER JOIN table1 a ON b.status_id = a.id
WHERE      b.datecol >= UNIX_TIMESTAMP(CURDATE()) AND
           b.datecol < UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY)
GROUP BY   b.status_id

这将避免将日期列包装在一个函数中,这会使查询不可搜索(即无法使用索引)。通过在裸日期列上保持比较,MySQL仍然可以使用索引(如果你在日期列上设置它),它应该非常有效。

如果您 绝对知道 您输入的日期永远不会在将来某个时间(即明天或第二天),您可以进一步简化:

SELECT     a.name, COUNT(*) AS num
FROM       table2 b
INNER JOIN table1 a ON b.status_id = a.id
WHERE      b.datecol >= UNIX_TIMESTAMP(CURDATE())
GROUP BY   b.status_id

第二次条件检查已删除,因为它不需要检查它是否会在将来发生。

答案 1 :(得分:2)

试试这个::

SELECT a.name, COUNT(*) AS num FROM table2 b 
INNER JOIN table1 a 
ON b.status_id=a.id 

where DATE(column_date) = DATE(now())  
GROUP BY status_id

答案 2 :(得分:2)

您应该在包含from_unixtime()等值的日期列上使用1341241153函数 因为这些值似乎以unix时间戳格式存储。

示例

mysql> select
    ->     from_unixtime( 1341241153 ) as 'my_datetime_1341241153',
    ->     date( from_unixtime( 1341241153 ) ) as 'my_date_1341241153',
    ->     curdate(),
    ->     curdate() > date( from_unixtime( 1341241153 ) ) 'is_today_later?',
    ->     curdate() = date( from_unixtime( 1341241153 ) ) 'is_today_equal?',
    ->     curdate() < date( from_unixtime( 1341241153 ) ) 'is_today_before?'
    -> from
    ->     dual
    -> \G
*************************** 1. row ***************************
my_datetime_1341241153: 2012-07-02 20:29:13
    my_date_1341241153: 2012-07-02
             curdate(): 2012-07-15
       is_today_later?: 1
       is_today_equal?: 0
      is_today_before?: 0
1 row in set (0.00 sec)

您的查询应该是:

SELECT a.name, COUNT(*) AS num FROM table2 b 
INNER JOIN table1 a 
ON ( b.status_id=a.id and curdate() = date( from_unixtime( b.crm_date_time_column ) ) )
GROUP BY status_id