如何在 SQL 中找到两个特定时间之间的数据
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7079543/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can I find the data between two specific times in SQL
提问by Withdalot
I need to run a query that finds all login dates (dd/mm/yyyy
) and times (hh.mm
) that occurred between 2am yesterday and 2am today. The login time in the database is formatted as mm-dd-yyyy hh.mm.ss
.
我需要运行一个查询来查找昨天凌晨 2 点到今天凌晨 2 点之间发生的所有登录日期 ( dd/mm/yyyy
) 和时间 ( hh.mm
)。数据库中的登录时间格式为mm-dd-yyyy hh.mm.ss
.
I have tried multiple select
and between
queries that either return data on the wrong day or outside the time spans.
我曾尝试多个select
和between
的查询在错误的一天或时间跨度之外的任何返回数据。
回答by James Hill
Based on the information that you provided, I can only give a generic example:
根据你提供的信息,我只能举一个通用的例子:
SELECT *
FROM [YourTable]
WHERE [YourDate] BETWEEN '08-15-2011 02:00:00' AND '08-16-2011 02:00:00'
**EDIT**
**编辑**
Per a good suggestion from the comments, here is a reusable version:
根据评论中的一个很好的建议,这是一个可重复使用的版本:
SELECT *
FROM [YourTable]
WHERE [YourDate] BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) + '02:00'
AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()-1), 0) + '02:00'
回答by WhatAWorld
Assuming mysql:
假设mysql:
SELECT * FROM your_table
WHERE STR_TO_DATE(your_date, '%m-%d-%Y %H.%i.%s') BETWEEN
DATE_SUB(STR_TO_DATE(DATE_FORMAT(NOW(), '%m-%d-%Y'), '%m-%d-%Y'), INTERVAL 22 HOUR) AND
DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%m-%d-%Y'), '%m-%d-%Y'), INTERVAL 2 HOUR)
I'm sure there's a better way though.
不过我相信有更好的方法。
回答by venkat
The query doesn't return any records if we use as follows...
如果我们使用如下,查询不会返回任何记录......
SELECT *
FROM [YourTable]
WHERE [YourDate] BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) + '02:00'
AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()-1), 0) + '02:00'
We are using between clause so the oldest date should be first and the query becomes as follows...
我们正在使用 between 子句,所以最旧的日期应该是第一个,查询变成如下...
SELECT *
FROM [YourTable]
WHERE [YourDate] BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()-1), 0) + '02:00'
AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) + '02:00'
回答by Piyush Ssharma
This can also help you out
这也可以帮助你
where pt.status in (1)
and pt.is_visible in ('t')
and pt.merchant in (0)
and (date(pt.created_at+'05:30') >= current_date-2
and extract(hour from(pt.created_at+'05:30')) >=17)
and ((pt.created_at+'05:30') <= current_date-1
and extract(hour from(pt.created_at+'05:30')) <=17)
回答by vidu
I think you can use these tips :
我想你可以使用这些技巧:
SET @start = CURDATE() - interval 1 DAY + interval 2 HOUR;
SET @end = CURDATE() + interval 2 HOUR;
And :
和 :
SELECT * FROM TABLE_NAME WHERE DATE_FIELD BETWEEN @start AND @end