我有一个SQLite表,如下所示:
+-----------+-------+
| StartTime | Name |
+-----------+-------+
| 08:00:00 | zone1 |
| 13:00:00 | zone2 |
| 17:30:00 | zone3 |
| 22:00:00 | zone4 |
+-----------+-------+
我正在尝试编写一个基于当前时间返回行的查询:
如果CurrentTime是08:30,它将返回zone1 如果CurrentTime是16:40,它将返回zone2 如果Currenttime是04:01,它将返回zone4
依旧......
到目前为止,我有一些运气但不完全是我想要的
SELECT * FROM table WHERE StartTime >= time('now', 'localtime')
ORDER BY StartTime LIMIT 1;
我已经尝试了上述语句的一些变体,但没有一个返回我之后的结果。
谢谢!
答案 0 :(得分:5)
如果您添加“EndTime”字段,您将使您的生活更轻松,因为您可以简单地检查当前时间是否在开始和结束时间之内。
例如,如果您的数据库表由以下内容组成......
+-----------+----------+-------+
| StartTime | EndTime | Name |
+-----------+----------+-------+
| 08:00:00 | 12:59:59 | zone1 |
| 13:00:00 | 17:29:59 | zone2 |
| 17:30:00 | 21:59:59 | zone3 |
| 22:00:00 | 07:59:59 | zone4 |
+-----------+----------+-------+
...您可以简单地使用以下行的查询:
SELECT Name FROM table WHERE StartTime >= time('now', 'localtime')
AND EndTime <= time('now', 'localtime')
ORDER BY StartTime LIMIT 1;
答案 1 :(得分:0)
您是否尝试过拥有条款?
SELECT * FROM table WHERE StartTime >= time('now', 'localtime')
HAVING StartTime = MIN(StartTime)
答案 2 :(得分:0)
两个版本。
这是最容易理解的,但它假设max(Name)
是有意义的。也就是说,它假定“名称”中的值从低到高排序。
SELECT max(Name)
FROM yourtable
WHERE StartTime< time("16:40:00");
此版本使用标量子查询。它不依赖于名称的任何有意义的顺序。我认为这个版本更强大。
SELECT Name
FROM yourtable
WHERE StartTime = (SELECT max(StartTime)
FROM yourtable
WHERE StartTime < time("16:40:00")
);
time('now','localtime')
in
生产。