2017-04-20 46 views
0

我试图从条件为uid ='1'和Month ='August'和Year ='的条件下获取所有'项目' 2016'Mysql获取记录WHERE MONTHNAME()&YEAR()等于一个值

date    |  uid |  project 
------------------------------------------- 
Wed, 01 Aug 2016 |  1  |  11 
Tue, 15 Aug 2016 |  2  |  11 
Mon, 31 Aug 2016 |  1  |  11 
Thu, 05 Sep 2016 |  1  |  12 
Sat, 10 Sep 2016 |  2  |  12 
Mon, 12 Feb 2017 |  3  |  12 
Tue, 31 Feb 2017 |  1  |  13 
Wed, 31 Mar 2017 |  2  |  13 
Fri, 31 Mar 2017 |  3  |  13 
Thu, 31 Mar 2017 |  1  |  14 

下面是查询我使用

SELECT project FROM logs where uid="1" AND MONTHNAME(STR_TO_DATE(date,'%W, %d %M %Y'))="August" AND YEAR(STR_TO_DATE(date,'%W, %d %M %Y'))="2016"; 

但它也返回一个月的记录。我在这里做错了什么?

+0

'和日期如'%8月%'和日期'%2016%''保持简单。 – JustOnUnderMillions

+0

如果你不太深入这个项目,你应该考虑使用mysql的内置日期函数。你现在在做什么是很多工作 –

回答

2

我只想用like

SELECT project 
FROM logs 
WHERE uid = 1 AND 
     date LIKE '% Aug 2016'; 

不要储存的日期/时间值作为字符串。如果你这样做,不要称他们为“日期”,称他们为“datestr”,以防止意外错误。但是,如果它是一个字符串,你可以把它看作一个字符串。

+0

感谢您的回答。此查询还会返回2017年8月的记录。 – Thowzif

+0

@Thowzif。 。 。它会怎么做? 'like'模式*显式*具有2016年。您是否有具有不同日期格式的记录? –

+0

感谢您的查询。我已经知道了。这是一个单独的\“字符,正在做出这样的结果。 – Thowzif

0
SELECT project 
FROM logs 
WHERE uid= 1 
AND MONTHNAME(STR_TO_DATE(date,'%W, %d %M %Y'))= 'August' 
AND YEAR(STR_TO_DATE(date,'%W, %d %M %Y'))= 2016 
; 
+0

我看不出你的查询与我的区别。你能解释吗? – Thowzif

+0

@Thowzif它是否适合你? –

+0

@Thowzif你提到uid和year部分作为字符串使用整数 –

相关问题