web-dev-qa-db-ja.com

MySQLでタイムスタンプの日付を日付のみのパラメーターと比較する方法は?

SQLステートメントで、TIMESTAMPとして保存された日付とYYYY-MM-DD形式の日付を比較するにはどうすればよいですか?

例:SELECT * FROM table WHERE timestamp = '2012-05-05'

このクエリは、指定された日のタイムスタンプを持つすべての行を返しますが、深夜のタイムスタンプを持つ行のみを返します。

ありがとう

70
Michael

DATE()関数を使用して、タイムスタンプの日付部分を抽出できます。

SELECT * FROM table
WHERE DATE(timestamp) = '2012-05-05'

ただし、タイムスタンプ列にインデックスがある場合、インデックスを利用できるため、これは高速になります。

SELECT * FROM table
WHERE timestamp BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'
116
Marcus Adams
 WHERE cast(timestamp as date) = '2012-05-05'
6
juergen d
SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00' 
    AND timestamp <= '2012-05-05 23:59:59'
5
Cfreak

一部で示唆されているように、DATE(timestamp)を使用することにより、列に操作を適用しているため、インデックスの順序に依存できません。

ただし、BETWEENの使用は、ミリ秒を含める場合にのみ信頼できます。タイムスタンプの例BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'では、2012-05-05 23:59:59.0012012-05-05 23:59:59.999の間のタイムスタンプを持つレコードを除外します。ただし、このメソッドでも、データ型の精度のためにいくつかの問題があります。時折、999ミリ秒が切り上げられます。

最善の方法は次のとおりです。

SELECT * FROM table
WHERE date>='2012-05-05' AND date<'2012-05-06'
4
Tom Kitson

MYSQLの変換関数を使用します。

SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05' 

これは動作するはずです

2
adrien

クエリを実行するためにSQLパラメータを使用している場合、これは役に立ちます

SELECT * FROM table WHERE timestamp between concat(date(?), ' ', '00:00:00') and concat(date(?), ' ', '23:59:59')
0
devesh

つかいます

SELECT * FROM table WHERE DATE(2012-05-05 00:00:00) = '2012-05-05' 
0
Muhammad Fahad

あなたの質問を読んだとき、「MySQL」というタグが見えるまで、あなたはOracle DBにいると思いました。とにかく、Oracleで作業する人にとっては、次の方法があります。

SELECT *
FROM table
where timestamp = to_timestamp('21.08.2017 09:31:57', 'dd-mm-yyyy hh24:mi:ss');
0
KeyMaker00