18

在 MySQL 我有这个查询

SELECT DISTINCT date, descr FROM book ORDER BY date

日期格式yyyy-mm-dd

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

有任何想法吗?

4

6 回答 6

36

使用DATE_FORMAT功能

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

或者使用MONTHandYEAR函数

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;

或使用<=and>=运算符

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

看到这个 SQLFiddle

于 2012-08-31T13:13:09.957 回答
6

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

SELECT *
FROM book
WHERE date >= '2012-01-01' AND date <= '2012-01-31'
于 2012-08-31T13:13:27.940 回答
4

试试这个:

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

如果您的“日期”列是 MySQL 日期字段,则此方法有效。

于 2012-08-31T13:12:35.867 回答
4

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

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

于 2013-01-14T09:42:11.890 回答
2

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

SELECT DISTINCT ID, date FROM book 
WHERE date LIKE '2012-01%'
ORDER BY date;

但是,通常不使用 like 进行日期过滤,对我来说使用 >= 和 <= 或两者之间更自然。此外,还有性能优势。

于 2020-01-03T10:12:21.090 回答
0
SELECT DISTINCT date, descr
FROM book
WHERE YEAR = DATE(NOW()) AND MONTH(date) = '1'

这会给你今年的书

于 2012-08-31T13:16:14.973 回答