0

私が扱っているMySQLテーブルには、日付と時刻が別々の列として含まれています。日付の形式は"y-m-d"and "hh:mm:ss"for time です。2 つの時刻が異なる日にある場合、2 つの時刻の間の行を正確に検索するにはどうすればよいですか? (たとえば、 と の間の2013-01-15 12:00:002013-01-17 17:00:00)

現時点では、時差がせいぜい 1 日であると仮定して悪い回避策を使用していますが、常にそうであるとは限りません。おそらくこれを達成する簡単な方法がありますが、私は何を理解することができません。ありがとう!

4

2 に答える 2

2

を使用してフィールドを連結しますCONCAT

SELECT  *
FROM    tableName
WHERE   CONCAT(dateCol, ' ', timeColumn) BETWEEN
            '2013-01-15 12:00:00' AND '2013-01-17 17:00:00'

ただし、(可能であれば) 2 つの列をデータ型と組み合わせてテーブルを変更しDateTime、インデックスを利用できるようにすることをお勧めします。上記のクエリ which uses CONCATrequires full table scanwhich は、大規模なデータベースのパフォーマンスが非常に低下します。

于 2013-01-16T08:03:11.713 に答える
1

JW.の回答は、最初にインデックスを使用して検索スペースを絞り込み、次に結果を正しいセットにトリミングすることでスピードアップできます。

select * from births
where date between '2013-01-15' and '2013-01-17' -- use index
and concat(date, ' ', time) between '2013-01-15 12:00:00' and '2013-01-17 17:00:00' 
;

詳細については、このSQL Fiddleを参照してください。

于 2013-01-16T08:18:18.873 に答える