1

可能重复:
Mysql 查询:检索当前日期查询

我需要一个 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

4 回答 4

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;

注意:我将其更新为使用 aWHERE而不是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;
于 2012-12-03T19:13:52.587 回答
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
于 2012-12-03T19:54:36.183 回答
0

尝试改变

((CRM_TRATATIVAS.Fecha)=Date())

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

MySQLDATE()函数需要一个参数,它本身不返回当前日期。您也可以只使用该CURDATE()功能而不是DATE(NOW())

于 2012-12-03T19:13:19.123 回答
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));
于 2012-12-03T19:16:43.420 回答