如何在SQLite中使用compareTo()的功能?

时间:2018-05-03 01:56:44

标签: mysql sql sqlite

我正在尝试在SQLite数据库中执行查询,以查看某些字符串是否属于两个字段的范围内。值。我有两个字段PROCEDURE proc3() : : proc1(p1, p2); proc2(p2); : : END proc3; start_time,其值存储为格式为HH:MM的字符串文本(不是时间戳),我在JavaScript中获得相同格式的时间(HH:MM)作为一个字符串。我想检查我从JavaScript获得的值是否落在某些记录的end_timestart_time值之间。

如何在SQL语句中执行该测试?我在其他语言(特别是Java)中遇到了方法end_time,它返回一个正数,0或负数,这取决于两个字符串中哪一个更大(按字母顺序),我希望我可以使用相同的方法,如果它有SQLite中的等价物。我该如何实施呢?或者我该如何进行检查?

1 个答案:

答案 0 :(得分:1)

当您处理可接受的时间字符串时: -

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
     

SQL As Understood By SQLite - Date And Time Functions

然后在您提及的情况下,您可以使用 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')
;

看起来像是: -

enter image description here

然后: -

SELECT * FROM times WHERE time(start_time) >= time('11:00') AND time(end_time) <= ('17:00');

会在17:00或之前找到11:00 之后开始的时间。

如果应用于示例表,结果将是: -

enter image description here

即。

  • 12:15 - 12:36 11:00 之后开始,在 17:00 之前结束,因此包括在内。
  • 13:26 - 17:50 虽然在 11:00 之后开始不在 17:00 之前或之后,因此被排除在外。< / LI>
  • 11:56 - 13:02 将被收录。
  • 10:45 - 12:00 未在 11:00之前启动因此被排除在外。