首页 > 解决方案 > 不同年份的 SQLITE 日期比较

问题描述

当我执行以下查询时:SELECT startDate, endDate FROM HasBeenReserved NATURAL JOIN House NATURAL JOIN Reservation WHERE houseID=1 AND startDate < '4/12/2020';

我得到以下结果:

startDate|endDate
09/12/2019|09/12/2019
11/12/2019|11/12/2019

到目前为止没有问题。

但是当我尝试这个时:SELECT startDate, endDate FROM HasBeenReserved NATURAL JOIN House NATURAL JOIN Reservation WHERE houseID=1 AND startDate < '1/12/2020';我刚刚将 2020 年 4 月 12 日更改为 20 年 1 月 12 日,这应该返回相同的结果,我得到以下信息:

startDate|endDate
09/12/2019|09/12/2019

有人可以解释发生了什么吗?

标签: sqldatabasesqlitedate

解决方案


您没有使用正确的日期格式。

SQLite 需要格式的日期yyy-mm-dd。您的代码发生的情况是 SQLite 正在进行字符串比较。就字符串而言,'11/12/2019'小于'4/12/2020'(因为前者以 开头,'1'后者以开头'4'),但大于'1/12/2020'(因为'1/'大于'11')。

我会敦促您将数据转换为正确的日期格式。为此,您可以进行字符串操作:

update mytable set
    startDate = 
        substr(startDate, 7) 
        || '-' || substr(startDate, 4, 2) 
        || '-' || substr(startDate, 1, 2),
    endDate = 
        substr(endDate , 7) 
        || '-' || substr(endDate , 4, 2) 
        || '-' || substr(endDate , 1, 2)
;

之后,您可以进行适当的日期比较,例如:

startDate < '2020-12-01' -- or '2020-12-04'

推荐阅读