【问题标题】:How can I use compareTo()'s functionality in SQLite?如何在 SQLite 中使用 compareTo() 的功能?
【发布时间】:2018-05-03 01:56:43
【问题描述】:

我正在尝试在 SQLite 数据库中执行查询,以查看某些字符串是否在两个字段值的范围内。我有两个字段,start_timeend_time,它们的值存储为格式为 HH:MM 的字符串文本(不是时间戳),并且我在与格式相同 (HH:MM) 的 JavaScript 中获取时间作为字符串好。我想检查我从 JavaScript 获得的值是否介于某些记录的 start_timeend_time 值之间。

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

【问题讨论】:

    标签: mysql sql sqlite


    【解决方案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')
    ;
    

    看起来像:-

    然后:-

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

    将查找从 11:00 或之后开始在 17:00 或之前结束的时间。

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

    • 12:15 - 12:3611:00 之后开始,在 17:00 之前结束,因此包含在内。
    • 13:26 - 17:50 虽然在 11:00 之后开始并不在 17:00 或之前开始,因此被排除在外。
    • 11:56 - 13:02 将包括在内。
    • 10:45 - 12:00 不会在 11:00 之前开始,因此被排除在外。

    【讨论】:

      猜你喜欢
      • 2011-09-24
      • 2022-08-22
      • 1970-01-01
      • 2019-04-15
      • 2013-12-13
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 2022-06-19
      相关资源
      最近更新 更多