SQL 查询 - 时间比较 (SQLite)

发布于 2024-12-06 12:31:55 字数 519 浏览 1 评论 0原文

我想问一下有没有人可以帮忙sql查询。我有时间格式为:HH:MM:SS 的表格。我想编写一个查询,返回距离当前时间最近的时间(未来的时间)。例如:表包含 3 行:12:00:00、12:01:00、12:02:00。如果:

1)当前时间是:12:00:30。查询返回:12:01:00.等等。

但是!

2) 当前时间为:12:02:30。查询返回:12:00:00。

我写了这个查询,它解决了我 1),但没有解决 2)。

select time(myColumn) 
from myTable 
where time(myColumn) >= time(current_timestamp, 'localtime') 
order by myColumn 
limit 1

如果有人可以提供帮助,我将不胜感激。

PS:数据库位于 SQLite 中(必须是),并且无法使用日期进行计算,例如:2011-01-01 12:00:00...)

谢谢汤姆。

I would like to ask if someone would be able to help with sql query. I have table with times in format: HH:MM:SS. I want to write a query that returns me the closest time (to the future) to the current time. For example: Table contains 3 rows: 12:00:00, 12:01:00, 12:02:00. If:

1) Current time is: 12:00:30. The query returns: 12:01:00., etc.

BUT!

2) Current time is: 12:02:30. The query returns: 12:00:00.

I write this query, whitch solves me 1), but not 2).

select time(myColumn) 
from myTable 
where time(myColumn) >= time(current_timestamp, 'localtime') 
order by myColumn 
limit 1

I would appreciate if someone could help.

PS: Database is in SQLite (must be) and is not possible to calculate with dates eg: 2011-01-01 12:00:00...)

Thank you Tom.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

素衣风尘叹 2024-12-13 12:31:55

你可以这样做:

             select min(  time(yourtimecolumn) ) from foo
             where time(current_timestamp, 'localtime') < time(yourtimecolumn) 

由汤姆编辑

You could do this:

             select min(  time(yourtimecolumn) ) from foo
             where time(current_timestamp, 'localtime') < time(yourtimecolumn) 

Edited by Tom

安静被遗忘 2024-12-13 12:31:55

编辑:如果您需要获取下一个最接近的时间,请尝试:

SELECT time(myColumn)
FROM myTable
ORDER BY CASE WHEN myColumn - time(current_timestamp, 'localtime') > 0,
         THEN myColumn - time(current_timestamp, 'localtime')
         ELSE myColumn - time(current_timestamp, '24 hours', 'localtime')
         END CASE
LIMIT 1

它按数据库中下一个时间戳的时间量进行排序,如果需要的话尝试添加 24 小时以获得正数(即将到来的时间)作为结果。

EDIT: if you need to get the NEXT closest time, try:

SELECT time(myColumn)
FROM myTable
ORDER BY CASE WHEN myColumn - time(current_timestamp, 'localtime') > 0,
         THEN myColumn - time(current_timestamp, 'localtime')
         ELSE myColumn - time(current_timestamp, '24 hours', 'localtime')
         END CASE
LIMIT 1

It sorts by the amount of time to the next timestamp in the database, attempting to add 24 hours if necessary to get a positive number (an upcoming time) as a result.

百思不得你姐 2024-12-13 12:31:55

我解决了!这是查询:

select 
case when 
(select min(time(myColumn)) from myTable where time(current_timestamp, 'localtime') < time(myColumn)) is null 
then 
(select min(time(myColumn)) from myTable where time(current_timestamp, 'localtime') > time(myColumn)) 
else 
(select min(time(myColumn)) from myTable where time(current_timestamp, 'localtime') < time(myColumn)) 
end

Thx Tim &戴夫为我指明了道路。

I solved it! This is the query:

select 
case when 
(select min(time(myColumn)) from myTable where time(current_timestamp, 'localtime') < time(myColumn)) is null 
then 
(select min(time(myColumn)) from myTable where time(current_timestamp, 'localtime') > time(myColumn)) 
else 
(select min(time(myColumn)) from myTable where time(current_timestamp, 'localtime') < time(myColumn)) 
end

Thx Tim & Dave who showed me the way.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文