sql - 不同年份的 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
有人可以解释发生了什么吗?
解决方案
您没有使用正确的日期格式。
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'
推荐阅读
- django - 为什么 Heroku 在我部署 Django 应用程序时给我一个 H10 错误
- angular - 制作角度图像裁剪器功能
- insert - 插入语句内的表中的自动增量 ID
- python - 尝试重置密码时出现 Djongo + Django + MongoDB Atlas DatabaseError
- python - AssertionError: [101, 1203, 1365, 1137, 8601, 117, 4835, 1104, 1141, 1292, 119, 102, 0, 0, 0, 0, 0, 0, 0, 0] 不是
- c++ - 为什么复制初始化需要 C++17 中的析构函数并保证移动/复制省略?
- python - 创建 Pandas.Dataframe 时如何保持索引中的顺序
- javascript - 仅将 .map() 方法用于副作用是否合法?
- c# - ASP.NET MVC 5 - 使用带有或不带有 __RequestVerificationToken 的 ajax 将视图模型数组发布到控制器
- x86 - WinDbg:地址中的冒号是什么意思?