2012-12-03 230 views
1

可能重複:
Mysql query: retrieve current date queryMySQL查詢日期

我需要一個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之前添加了Date將其轉換成日期。

+0

你能確認'CRM_TRATATIVAS.Fecha'產生的日期格式爲'YYYY-MM-DD'嗎? – Quantastical

+0

我不知道它是否有所作爲,它是YYYY-MM-DD HH:MM:SS –

+0

「Fecha」的數據類型是什麼?它是'DATE','DATETIME'還是'TIMESTAMP'? –

回答

0

嘗試改變:

CRM_TRATATIVAS.Fecha=Date() 

與此:

DATE(CRM_TRATATIVAS.Fecha)=CURDATE() 

CURDATE()返回當前日期和DATE(Fecha)只返回日期部分Fecha(沒有小時,分鐘和seco NDS)。我還建議你這樣寫查詢,看起來更清潔:

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 
+0

謝謝,這是答案!只有我的本地IT專家在我看到這個答案之前找到了它。 –

0

嘗試改變

((CRM_TRATATIVAS.Fecha)=Date()) 

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

MySQL的DATE()功能需要一個參數,它本身不返回當前的日期。您也可以只使用CURDATE()函數而不是DATE(NOW())

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; 
+0

「GROUP BY」將刪除重複項。 –

+0

@ypercube我同意這樣做,這就是爲什麼我只評論該條款並不刪除它。我可能會在GROUP BY上使用'DISTINCT' – Taryn

+0

這給我一個空答案。我在Fecha專欄有條目,比如2012-12-03 15:38:16。所有的答案都給了我一樣的。 –

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));