回答:
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
DATETIME
、これは時間の部分を無視して、前の日付のすべてのレコードを選択します。で実行された23:59:59
場合、クエリは48
でなく、過去1 時間のすべてのレコードを返します24
。
でMySQL
:
SELECT *
FROM mytable
WHERE record_date >= NOW() - INTERVAL 1 DAY
でSQL Server
:
SELECT *
FROM mytable
WHERE record_date >= DATEADD(day, -1, GETDATE())
でOracle
:
SELECT *
FROM mytable
WHERE record_date >= SYSDATE - 1
でPostgreSQL
:
SELECT *
FROM mytable
WHERE record_date >= NOW() - '1 day'::INTERVAL
でRedshift
:
SELECT *
FROM mytable
WHERE record_date >= GETDATE() - '1 day'::INTERVAL
でSQLite
:
SELECT *
FROM mytable
WHERE record_date >= datetime('now','-1 day')
でMS Access
:
SELECT *
FROM mytable
WHERE record_date >= (Now - 1)
function getdate() does not exist
ます。それをに置き換えたところ、問題なく動作しましたcurrent_date
。
CURDATE()
、時刻部分を含む日付を返さないように見えるため、に移動し00
ます。のNOW()
代わりに使用して修正しましたCURDATE()
。
MySQL:
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR)
INTERVALは、YEAR、MONTH、DAY、HOUR、MINUTE、SECONDにすることができます
たとえば、過去10分間
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)
考慮されるタイムスタンプがUNIXタイムスタンプの場合最初にUNIXタイムスタンプ(例1462567865)をmysqlタイムスタンプまたはデータに変換する必要があります
SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField)
場合: SQL Server 2016以降でミリ秒の精度が必要な場合: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
select ...
from ...
where YourDateColumn >= getdate()-1
こんにちは私は今、元の投稿から多くの時間を過ぎましたが、同様の問題が発生したので共有したいと思います。
私はこのフォーマットYYYY-MM-DD hh:mm:ssの日時フィールドを取得しました。1日中アクセスしたいので、これが私の解決策です。
MySQLの関数DATE():日付または日付時刻式の日付部分を抽出します。
SELECT * FROM `your_table` WHERE DATE(`your_datatime_field`)='2017-10-09'
これで、この日のすべての行レジスターを取得します。
だれでもお役に立てば幸いです。
SQL Serverの場合(過去24時間):
SELECT *
FROM mytable
WHERE order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE()