MySQLでは、私はこのクエリを持っています
SELECT DISTINCT date, descr FROM book ORDER BY date
日付の形式はyyyy-mm-dd
2012年1月の本だけを選択したい。 like
を使用しようとしましたが、うまくいきません。
何か案は?
DATE_FORMAT
関数
SELECT DISTINCT date, descr FROM book
WHERE DATE_FORMAT(date, '%Y %m') = DATE_FORMAT('2012-01-01', '%Y %m')
ORDER BY date
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;
ここでは、>=
および<=
演算子を使用できます。以下のコードを確認してください:
SELECT *
FROM book
WHERE date >= '2012-01-01' AND date <= '2012-01-31'
これを試して:
SELECT DISTINCT date, descr FROM book WHERE YEAR(date) = '2012' and MONTH(date) = '1'
これは、「日付」列がMySQL日付フィールドの場合に機能します。
LIKE構文を使用したい場合は、最初に日付をCHARに変換できます。
SELECT DISTINCT date、descr FROM book WHERE CAST(date AS char)LIKE '2012-01%' ORDER BY date;
SELECT DISTINCT date, descr
FROM book
WHERE YEAR = DATE(NOW()) AND MONTH(date) = '1'
これはあなたに今年の本を与えるでしょう
Likeを使用することもできます。 @ hims056フィドルを使用すると、それをテストできます。
SELECT DISTINCT ID, date FROM book
WHERE date LIKE '2012-01%'
ORDER BY date;
ただし、日付のフィルタリングにlikeを使用することは一般的ではありません。私にとっては、> =と<=の間、またはその間に使用する方が自然です。また、パフォーマンス上の利点もあります。