1

データベースには、「誕生日」列を持つテーブルユーザーがいます。

これが結果をフェッチするために使用するSQLクエリです

SELECT *
FROM (`users`)
WHERE `birthday` between '12/11/1982' and '31/01/1983'

問題は、1982年のレコードしか取得できないことです。

1983年の記録が存在することに注意してください。

ここで何が問題になる可能性がありますか?

4

2 に答える 2

2

これは、マーク・バイアーズからの単なる代替回答です。列のデータ型が、の形式である場合は、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'

ソース

于 2012-11-12T15:26:00.617 に答える
1

日付リテラルの最初に年を入れる必要があります。

SELECT *
FROM `users`
WHERE `birthday` between '1982-11-12' AND '1983-01-31'

ドキュメントから:

日付と時刻の値は、値の正確なタイプやその他の要因に応じて、引用符で囲まれた文字列や数値など、いくつかの形式で表すことができます。たとえば、MySQLが日付を予期しているコンテキストでは、「2015-07-21」、「20150721」、および20150721のいずれかを日付として解釈します。

タイプを使用している場合varcharでも、デフォルトの並べ替え順序を使用すると日付が正しく並べ替えられるため、日付を最初に(データとクエリの両方で)配置することは理にかなっています。

于 2012-11-12T15:08:52.123 に答える