mysql - 如何在 SQLite 中使用 CompareTo() 的功能?

标签 mysql sql sqlite

我正在尝试在 SQLite 数据库中执行查询,以查看某些字符串是否在两个字段值的范围内。我有两个字段,start_timeend_time,它们的值存储为 HH:MM 格式的字符串文本(不是时间戳),并且我在 JavaScript 中获得相同的时间也将 (HH:MM) 格式设置为字符串。我想检查从 JavaScript 获取的值是否在某些记录的 start_timeend_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

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');

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

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

enter image description here

  • 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 之前开始,因此被排除在外。

关于mysql - 如何在 SQLite 中使用 CompareTo() 的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50145863/

相关文章:

java - 如何在 Android 中的联系人数据库上设置触发器

php - 如果某些产品有折扣价(SQL),如何按价格对产品进行排序?

SQL Server Case 语句不过滤记录

sql - 数据库 SQL 错误,应该可以工作

php - 如何在 PHP 中向对象添加新的键值对?

android - 如果 SQLite 数据库达到存储限制,插入会发生什么情况?

c# - 如何获取刚刚插入的记录的 pkey 值(自动增量)?

php - Mysql将一个表中的主键添加到另外两个表中

mysql - 访问等于值的 SQL 计数字段

php - 在mysql中获取不同列名的简单方法