我正在尝试在 SQLite 数据库中执行查询,以查看某些字符串是否在两个字段值的范围内。我有两个字段,start_time
和 end_time
,它们的值存储为 HH:MM 格式的字符串文本(不是时间戳),并且我在 JavaScript 中获得相同的时间也将 (HH:MM) 格式设置为字符串。我想检查从 JavaScript 获取的值是否在某些记录的 start_time
和 end_time
值之间。
如何在 SQL 语句中执行该测试?我在其他语言(特别是 Java)中遇到了 compareTo()
方法,它返回一个正值、0 或负值,具体取决于两个字符串中哪个更大(按字母顺序排列),我希望我可以使用如果 SQLite 中有等效的方法,则使用相同的方法。我怎样才能实现它或者我怎样才能进行检查?
最佳答案
当您处理可接受的时间字符串时:-
Time Strings A time string can be in any of the following formats: YYYY-MM-DD YYYY-MM-DD HH:MM YYYY-MM-DD HH:MM:SS YYYY-MM-DD HH:MM:SS.SSS YYYY-MM-DDTHH:MM YYYY-MM-DDTHH:MM:SS YYYY-MM-DDTHH:MM:SS.SSS HH:MM HH:MM:SS HH:MM:SS.SSS now DDDDDDDDDD
然后在您提到的情况下,您可以使用 time
功能将理解/识别时间。您可以将运算符与 WHERE 子句一起使用。
例如
假设创建了一个名为 times 的表:-
DROP TABLE IF EXISTS times;
CREATE TABLE times (start_time TEXT, end_time TEXT);
INSERT INTO times VALUES
('12:15','12:36'),
('13:26','17:50'),
('11:56','13:02'),
('10:45','12:10')
;
看起来像:-
然后:-
SELECT * FROM times WHERE time(start_time) >= time('11:00') AND time(end_time) <= ('17:00');
将查找在 11:00 或之后开始并在 17:00 或之前结束的时间。
如果应用于示例表,结果将是:-
即
- 12:15 - 12:36 在 11:00 之后开始,在 17:00 之前结束,因此包含在内。
- 13:26 - 17:50,尽管在 11:00 之后开始,但不在 17:00 或之前开始,因此被排除在外。里>
- 11:56 - 13:02 将包含在内。
- 10:45 - 12:00 不会在 11:00 之前开始,因此被排除在外。
关于mysql - 如何在 SQLite 中使用 CompareTo() 的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50145863/