Почему SQLite считает большее число <меньшее число истинным? - PullRequest
0 голосов
/ 28 апреля 2020

Запрашивая базу данных SQLite моего приложения Android, я столкнулся с любопытной проблемой. У меня есть запрос, который сравнивает время одной эпохи (хранится в базе данных в целочисленном поле) с текущим временем эпохи. Чтобы упростить отладку, я написал небольшой тестовый запрос, чтобы увидеть, как SQLite обрабатывает мое целое число эпохи по сравнению с функцией strftime. Вот мой запрос:

select 1615759200 < strftime('%s', 'now');

Результат:

1

Для справки: значение 1615759200 - это дата 14 марта 2021 года. Текущая дата на момент написания - 28 апреля , 2020, что примерно 1588033692 в эпоху времени. По понятным причинам я ожидаю, что приведенный выше запрос приведет к 0: ложь, поскольку дата в 2021 году НЕ меньше, чем дата в 2020 году. И все же он возвращает 1: истина! Это бесит! Кто-нибудь может сказать мне, что мне здесь не хватает?

1 Ответ

0 голосов
/ 28 апреля 2020

Тип данных, который возвращается strftime(), равен text, и вы должны привести его к целому числу, чтобы сравнение работало так, как вы ожидаете:

select 1615759200 < cast(strftime('%s', 'now') as int)

или:

select 1615759200 < strftime('%s', 'now') + 0

Вы можете найти больше информации о типах данных и сходствах SQLite: Типы данных в SQLite версии 3

...