私のテーブル
starttime | endtime | id
10:30 11:30 1
11:30 12:30 2
14:30 16:30 3
15:30 16:30 4
10:30から12:30までのIDを選択したい場合は、以下のコマンドを使用します
select id
from table
where STR_TO_DATE(starttime,'%H:%i')>='10:30' and
STR_TO_DATE(endtime,'%H:%i')<='12:30';
これにより、ID 1のみが得られますが、2は得られません。また、12:30から12:40に変更すると、1と2が得られます。なぜそのように機能しないのですか?
問題は、日付オブジェクトを文字列と比較しようとしていることです。正確には、次の式で
STR_TO_DATE(starttime,'%H:%i') >= '10:30'
STR_TO_DATE
日付を返しますが、'10:30'
単なるvarcharです(偶然にも時間のように見えます)。この道を進みたい場合は、以下を使用して比較の両側をキャストする必要がありますSTR_TO_DATE
。
SELECT id
FROM table
WHERE STR_TO_DATE(starttime,'%H:%i') >= STR_TO_DATE('10:30','%H:%i') AND
STR_TO_DATE(endtime,'%H:%i') <= STR_TO_DATE('12:30','%H:%i');
しかし、長期的により良いアプローチは、あなたstarttime
とendtime
列をまたはのいずれDATETIME
かにすることTIMESTAMP
です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加