为什么 SQLite 认为较大的数字 < 较小的数字为真?
Why does SQLite consider larger number < smaller number to be true?
查询我的 Android 应用程序的 SQLite 数据库时,我 运行 遇到了一个奇怪的问题。我有一个查询,它根据当前纪元时间检查一个纪元时间(存储在数据库中的整数字段中)。为了简化调试,我编写了一个小测试查询来查看 SQLite 如何处理我的纪元整数与 strftime 函数。这是我的查询:
select 1615759200 < strftime('%s', 'now');
结果是:
1
供参考:值 1615759200 是 2021 年 3 月 14 日的日期。撰写本文时的当前日期是 2020 年 4 月 28 日,大约是纪元时间 1588033692。出于显而易见的原因,我希望上述查询的结果为 0: false,因为 2021 年的日期不小于 2020 年的日期。然而,它 returns 1: true!真气人!谁能告诉我我在这里缺少什么?
strftime()
返回的数据类型是 text
,您必须将其转换为整数,以便比较按您期望的方式进行:
select 1615759200 < cast(strftime('%s', 'now') as int)
或:
select 1615759200 < strftime('%s', 'now') + 0
您可以找到有关 SQLite 的数据类型和关联的更多信息:Datatypes In SQLite Version 3
查询我的 Android 应用程序的 SQLite 数据库时,我 运行 遇到了一个奇怪的问题。我有一个查询,它根据当前纪元时间检查一个纪元时间(存储在数据库中的整数字段中)。为了简化调试,我编写了一个小测试查询来查看 SQLite 如何处理我的纪元整数与 strftime 函数。这是我的查询:
select 1615759200 < strftime('%s', 'now');
结果是:
1
供参考:值 1615759200 是 2021 年 3 月 14 日的日期。撰写本文时的当前日期是 2020 年 4 月 28 日,大约是纪元时间 1588033692。出于显而易见的原因,我希望上述查询的结果为 0: false,因为 2021 年的日期不小于 2020 年的日期。然而,它 returns 1: true!真气人!谁能告诉我我在这里缺少什么?
strftime()
返回的数据类型是 text
,您必须将其转换为整数,以便比较按您期望的方式进行:
select 1615759200 < cast(strftime('%s', 'now') as int)
或:
select 1615759200 < strftime('%s', 'now') + 0
您可以找到有关 SQLite 的数据类型和关联的更多信息:Datatypes In SQLite Version 3