【问题标题】:How can I fix wrong date format in SQLite如何修复 SQLite 中错误的日期格式
【发布时间】:2020-02-20 17:03:18
【问题描述】:

我正在开发使用 SQLite 存储数据的应用程序。 我创建了列日期。由于我是初学者,我将日期输入为 %m/%d/%Y 时犯了一个错误(例如:2/20/2020) 现在我在删除选定日期之间的行时遇到了问题。 我尝试使用此代码: SELECT * FROM Table WHERE Date BETWEEN strftime('%m/%d/%Y','2/5/2019') AND strftime('%m/%d/%Y','2/20/2020') 但这不起作用。

示例表:

ID | Date
01 | 9/2/2019
02 | 2/20/2020

提前感谢您的帮助。

【问题讨论】:

  • 如果您想以除相等性之外的任何方式比较日期,请使用the documentation 中列出的日期格式之一。
  • 省去所有麻烦,将日期列更新为 YYYY-MM-DD。
  • 怎么样?当我使用更新表集 Date = substr(Date, 6) || "-" || substr(日期,3,1) || "-" || substr(日期,1,1);然后 2/20/2020 变为 2020-20-2/ 但 9/2/2019 变为 019-9/-2/ .. 无法正常工作

标签: sqlite strftime


【解决方案1】:

将您的日期更新为对 SQLite 日期格式唯一有效的 YYYY-MM-DD

update tablename
set date = substr(date, -4) || '-' || 
           substr('00' || (date + 0), -2, 2) || '-' ||
           substr('00' || (substr(date, instr(date, '/') + 1) + 0), -2, 2);

请参阅demo
结果:

| ID  | Date       |
| --- | ---------- |
| 1   | 2019-09-02 |
| 2   | 2020-02-20 |

现在您可以设置如下条件:

Date BETWEEN '2019-02-05' AND '2020-02-20'

如果您进行此更改,那么您可以在select 语句中使用函数strftime() 以您想要的任何格式返回日期:

SELECT strftime('%m/%d/%Y', date) date FROM Table

如果您不更改日期列的格式,那么每次需要比较日期时,您都必须将值与UPDATE 语句中使用的表达式进行转换,这是您可以做出的最糟糕的选择.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2019-06-09
    • 2015-05-11
    相关资源
    最近更新 更多