データベースには、「誕生日」列を持つテーブルユーザーがいます。
これが結果をフェッチするために使用するSQLクエリです
SELECT *
FROM (`users`)
WHERE `birthday` between '12/11/1982' and '31/01/1983'
問題は、1982年のレコードしか取得できないことです。
1983年の記録が存在することに注意してください。
ここで何が問題になる可能性がありますか?
これは、マーク・バイアーズからの単なる代替回答です。列のデータ型が、の形式である場合は、birthday
これvarchar
をおdd/MM/yyyy
読みください。それ以外の場合は、 MarkByerのからお読みください。
DATE
最初に行う必要があるのは、を使用して列をまたはDATETIME
データ型に変換することですSTR_TO_DATE
。
SELECT *
FROM `users`
WHERE STR_TO_DATE(`birthday`,'%d/%m/%Y')
between '1982-01-12' and '1983-12-31'
ソース
日付リテラルの最初に年を入れる必要があります。
SELECT *
FROM `users`
WHERE `birthday` between '1982-11-12' AND '1983-01-31'
ドキュメントから:
日付と時刻の値は、値の正確なタイプやその他の要因に応じて、引用符で囲まれた文字列や数値など、いくつかの形式で表すことができます。たとえば、MySQLが日付を予期しているコンテキストでは、「2015-07-21」、「20150721」、および20150721のいずれかを日付として解釈します。
タイプを使用している場合varchar
でも、デフォルトの並べ替え順序を使用すると日付が正しく並べ替えられるため、日付を最初に(データとクエリの両方で)配置することは理にかなっています。