Как я могу использовать функцию CompareTo () в SQLite? - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь выполнить запрос в базе данных SQLite, чтобы проверить, попадает ли какая-либо строка в диапазон значений двух полей. У меня есть два поля, start_time и end_time, значения которых хранятся в виде строкового текста (не метки времени) в формате ЧЧ: ММ, и я получаю время в JavaScript того же формата (ЧЧ: ММ), что и строка, как Что ж. Я хочу проверить, находится ли значение, полученное из JavaScript, между значениями start_time и end_time какой-либо записи.

Как мне выполнить этот тест в операторе SQL? Я сталкивался с методом compareTo() в других языках (в частности, с Java), который возвращает положительный, 0 или отрицательный в зависимости от того, какая из двух строк больше (в алфавитном порядке), и я надеялся, что смогу использовать тот же метод, если он имеет эквивалентный в SQLite. Как я могу реализовать это или как еще сделать эту проверку?

1 Ответ

0 голосов
/ 03 мая 2018

Поскольку вы имеете дело с приемлемой временной строкой: -

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 как понял SQLite - функции даты и времени

тогда, в случае, если вы упомянули, вы можете использовать функцию 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: 36 начинается после 11: 00 и заканчивается до 17: 00 , поэтому включено.
  • 13: 26 - 17: 50 , хотя начиная с 11: 00 нет или раньше 17: 00 , поэтому исключается.
  • 11: 56 - 13: 02 будут включены.
  • 10: 45 - 12: 00 не запускается до 11: 00 , поэтому исключается.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...