MySQL选择日期的行

时间:2012-08-31 13:09:27

标签: mysql date select format

在MySQL中我有这个查询

SELECT DISTINCT date, descr FROM book ORDER BY date

日期格式为yyyy-mm-dd

我想只选择 2012年1月的图书。我曾尝试使用like,但这不起作用。

有什么想法吗?

6 个答案:

答案 0 :(得分:27)

使用DATE_FORMAT功能

SELECT DISTINCT date, descr FROM book 
WHERE DATE_FORMAT(date, '%Y %m') = DATE_FORMAT('2012-01-01', '%Y %m')
ORDER BY date

或使用MONTHYEAR函数

SELECT DISTINCT date, descr FROM book 
WHERE Month(date) = Month('2012-01-01')
AND Year(date) = Year('2012-01-01')
ORDER BY date;

或使用BETWEEN函数

SELECT DISTINCT date, descr FROM book 
WHERE date BETWEEN '2012-01-01'
AND '2012-01-31'
ORDER BY date;

或使用<=>=运营商

SELECT DISTINCT date, descr FROM book 
WHERE date >= '2012-01-01'
AND date <= '2012-01-31'
ORDER BY date;

See this SQLFiddle

答案 1 :(得分:6)

您可以在此处使用>=<=运算符。检查以下代码:

SELECT *
FROM book
WHERE date >= '2012-01-01' AND date <= '2012-01-31'

答案 2 :(得分:3)

试试这个:

SELECT DISTINCT date, descr FROM book WHERE YEAR(date) = '2012' and MONTH(date) = '1'

如果您的&#34; date&#34; -column是MySQL日期字段,则此方法有效。

答案 3 :(得分:1)

如果您坚持要使用LIKE语法,可以先将日期转换为CHAR:

SELECT DISTINCT date,descr FROM book WHERE CAST(date AS char)LIKE'2012-01%'ORDER BY date;

答案 4 :(得分:0)

SELECT DISTINCT date, descr
FROM book
WHERE YEAR = DATE(NOW()) AND MONTH(date) = '1'

这将为您提供今年的书籍

答案 5 :(得分:0)

使用like也可以。使用@ hims056小提琴,您可以对其进行测试:

0

但是,通常不喜欢使用like进行日期过滤,对我而言,使用> =和<=或之间更自然。此外,还有性能上的好处。