時刻は「09:21 am」としてデータベースに保存されます
どうすれば範囲結果を取得できますか
例えば
select * from tablename where stored_time between '09:21 am' and '10:05 pm';
上記のクエリを試しましたが、適切な結果が得られません。これは、時刻が varchar として格納されるためです。
この文字列を時間に変換して mysql でクエリする関数はありますか?
STR_TO_DATE()
次の形式で使用します。
SELECT STR_TO_DATE(UPPER('09:21 am'), '%h:%i %p');
/* 09:21:00 */
%h
= 時間 00-12
%i
= 分
%p
= AM/PM (UPPER()
小文字バージョンと一致するように大文字に変換されます)
したがって、完全なクエリは次のとおりです。
SELECT *
FROM tablename
WHERE
/* Use 24h time for the comparison values and wrap stored_time in the STR_TO_DATE() */
STR_TO_DATE(UPPER(stored_time)) between '09:21:00' and '22:05:00';
値を文字列として格納するのではなく、この列を実数TIME
または型に切り替えることをお勧めします。DATETIME
を活用できますDATE_FORMAT(date,format)
。ドキュメンテーション
select * from tablename where DATE_FORMAT(stored_time,'%h:%i %p') between
DATE_FORMAT('09:21 am','%h:%i %p') and DATE_FORMAT('10:05 pm','%h:%i %p');