【问题标题】:SQLITE Date Comparison with different years不同年份的 SQLITE 日期比较
【发布时间】:2020-04-04 04:23:06
【问题描述】:

当我执行以下查询时: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 日更改为 2020 年 1 月 12 日,这应该返回相同的结果,我得到以下信息:

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

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

【问题讨论】:

  • 日期的格式是:dd/MM/yyyy,这是不可比较的,因为 SQLite 中的日期是字符串,并且作为字符串进行比较。将格式更改为:yyyy/MM/dd

标签: sql database sqlite date


【解决方案1】:

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

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'

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多