web-dev-qa-db-ja.com

MySQLは次のような日付の行を選択します

MySQLでは、私はこのクエリを持っています

SELECT DISTINCT date, descr FROM book ORDER BY date

日付の形式はyyyy-mm-dd

2012年1月の本だけを選択したい。 likeを使用しようとしましたが、うまくいきません。

何か案は?

15
Axxess

DATE_FORMAT 関数

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

または MONTH および YEAR 関数を使用する

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;

このSQLFiddleを参照してください

29
hims056

ここでは、>=および<=演算子を使用できます。以下のコードを確認してください:

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

これを試して:

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

これは、「日付」列がMySQL日付フィールドの場合に機能します。

3
j0nes

LIKE構文を使用したい場合は、最初に日付をCHARに変換できます。

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

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

これはあなたに今年の本を与えるでしょう

0
Muhammad Raheel

Likeを使用することもできます。 @ hims056フィドルを使用すると、それをテストできます。

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

ただし、日付のフィルタリングにlikeを使用することは一般的ではありません。私にとっては、> =と<=の間、またはその間に使用する方が自然です。また、パフォーマンス上の利点もあります。

0
Ferran