我有一个表格,其中记录以9/23/2014格式存储在日期格式中。 我搜索了很多,但我得到的所有结果都是时间戳格式(2013-12-27)。
任何人都可以帮助我,如何从特定月份检索数据(比如说'2014年9月')
非常感谢帮助。
Table: events
id course description date start end
1 john test 9/23/2014 1:00pm 3:00pm
2 brad play 12/30/2014 5:00pm 8:00pm
My Code:
SELECT date FROM events WHERE MONTHNAME(date) = 'September' AND YEAR(date) = '2014'
答案 0 :(得分:5)
你应该使用BETWEEN -
SELECT *
FROM `events`
WHERE `date` BETWEEN '2013-09-01' AND '2013-09-30';
因为您的日期存储为varchar
(您真的应该修复),您必须将字符串转换为日期格式然后搜索。但是表现会很糟糕 -
WHERE STR_TO_DATE(`date`, '%m/%/d/%Y %h:%i:%s %p') BETWEEN STR_TO_DATE('2013-09-01', '%m/%/d/%Y') AND STR_TO_DATE('2013-09-30', '%m/%/d/%Y')
或
WHERE STR_TO_DATE(LEFT(`date`,LOCATE(' ',`date)),'%m/%d/%Y') BETWEEN '2013-09-01' AND '2013-09-30';
你也可以使用这种方法(虽然我更喜欢第一种,因为它提供的控制) -
SELECT * FROM `table` WHERE YEAR(`date_column`) = 2013 AND MONTH(`date_column`) = 9;
编辑:已更新以反映OP的表架构。在命名列之前,您应该始终检查reserved word信息。
答案 1 :(得分:0)
简单试试这个:
$query = mysqli_query($connect,'SELECT columns FROM tablename WHERE MONTHNAME(datecolumnn) = 'September' AND YEAR(datecolumn) = '2014');
)
答案 2 :(得分:0)
您可以尝试这样的事情:
SELECT * FROM my_table WHERE date_field BETWEEN DATE_FORMAT('%m/%d/%Y','2013-09-01') AND DATE_FORMAT('%m/%d/%Y','2013-09-30')
它应该有用。