MySQL查询日期

时间:2012-12-03 19:08:21

标签: mysql

  

可能重复:
  Mysql query: retrieve current date query

我需要一个MySQL查询,它将选择包含今天日期的一些数据。我构建了以下查询:

SELECT CRM_TRATATIVAS.ID_Vendedor, CRM_TRATATIVAS.Fecha
FROM CRM_TRATATIVAS
GROUP BY CRM_TRATATIVAS.ID_Vendedor, CRM_TRATATIVAS.Fecha, CRM_TRATATIVAS.ID_Categoria
HAVING (((CRM_TRATATIVAS.ID_Vendedor)=10 Or (CRM_TRATATIVAS.ID_Vendedor)=29 Or (CRM_TRATATIVAS.ID_Vendedor)=32) AND ((CRM_TRATATIVAS.Fecha)=Date()) AND ((CRM_TRATATIVAS.ID_Categoria)=14));

如果我取消= Date(),它就可以了。任何想法可能是什么问题?

最终的数据显示是这样的,没有括号和圆点(我找不到如何制作一张桌子!

 Fecha                      Vendedor
 2012-12-03 10:12:13        (10)
 2012-12-03 12:14:16        (10)
 2012-12-03 09:15:46        (29)
 2012-12-03 13:35:56        (32)

固定!

我使用此查询修复。

SELECT CRM_TRATATIVAS.ID_Vendedor, CRM_TRATATIVAS.Fecha
FROM CRM_TRATATIVASGROUP BY CRM_TRATATIVAS.ID_Vendedor, CRM_TRATATIVAS.Fecha, CRM_TRATATIVAS.ID_Categoria
HAVING (((CRM_TRATATIVAS.ID_Vendedor)=10 Or (CRM_TRATATIVAS.ID_Vendedor)=29 Or (CRM_TRATATIVAS.ID_Vendedor)=32) AND ((DATE(CRM_TRATATIVAS.Fecha)) = CURDATE()) AND ((CRM_TRATATIVAS.ID_Categoria)=14));

由于Fecha是DATETIME列,我在引用之前添加了Date以将其转换为日期。

4 个答案:

答案 0 :(得分:1)

我想你可能想要以下内容:

SELECT c.ID_Vendedor, c.Fecha
FROM CRM_TRATATIVAS c
WHERE c.ID_Vendedor IN (10, 29, 32) 
    AND c.Fecha = Curdate()
    AND c.ID_Categoria=14
-- GROUP BY c.ID_Vendedor, c.Fecha, c.ID_Categoria;

注意:我对此进行了更新,以使用WHERE代替HAVING子句。如果存在需要过滤的聚合函数,则使用HAVING子句。此外,我不确定您为什么使用GROUP BY列表中没有汇总功能的SELECT条款

如果您的日期Fecha有日期和时间,并且您只想匹配日期部分,那么您可能希望使用:

SELECT c.ID_Vendedor, c.Fecha
FROM CRM_TRATATIVAS c
WHERE c.ID_Vendedor IN (10, 29, 32) 
    AND Date(c.Fecha) = Curdate()
    AND c.ID_Categoria=14
-- GROUP BY c.ID_Vendedor, c.Fecha, c.ID_Categoria;

答案 1 :(得分:0)

尝试更改

((CRM_TRATATIVAS.Fecha)=Date())

((CRM_TRATATIVAS.Fecha)=Date(NOW()))

MySQL DATE()函数需要一个参数,它本身不会返回当前日期。您也可以使用CURDATE()函数代替DATE(NOW())

答案 2 :(得分:0)

查询中是否有任何遗漏?如果你不需要一种聚合函数形式,我不会使用GROUP BY / HAVING子句。

查询如下:

SELECT CRM_TRATATIVAS.ID_Vendedor, CRM_TRATATIVAS.Fecha
FROM CRM_TRATATIVAS
WHERE (((CRM_TRATATIVAS.ID_Vendedor)=10 Or (CRM_TRATATIVAS.ID_Vendedor)=29 Or
 (CRM_TRATATIVAS.ID_Vendedor)=32) AND ((CRM_TRATATIVAS.Fecha)=Date()) AND 
 ((CRM_TRATATIVAS.ID_Categoria)=14));

答案 3 :(得分:0)

尝试改变:

CRM_TRATATIVAS.Fecha=Date()

用这个:

DATE(CRM_TRATATIVAS.Fecha)=CURDATE()

CURDATE()返回当前日期,DATE(Fecha)仅返回Fecha的日期部分(不包括小时,分钟和秒)。我还建议你用这种方式编写查询,看起来更干净:

SELECT Distinct
  CRM_TRATATIVAS.ID_Categoria,
  CRM_TRATATIVAS.ID_Vendedor,
  CRM_TRATATIVAS.Fecha
FROM
  CRM_TRATATIVAS
WHERE
  CRM_TRATATIVAS.ID_Vendedor in (10, 29, 32)
  AND DATE(CRM_TRATATIVAS.Fecha) = CURDATE()
  AND CRM_TRATATIVAS.ID_Categoria=14