【问题标题】:I can't filter by date in SQLite我无法在 SQLite 中按日期过滤
【发布时间】:2021-08-21 14:23:00
【问题描述】:

我无法在 SQL 上按日期过滤,是不是语法错误?

但如果我使用 >= 运算符,它就完成了工作。当我想查找在特定日期 created_at 的 id 时,在本例中为 '2021-03-01',什么都没有出现。

预期的输出是在该特定日期创建的 Id。

数据预览

这是我的语法

select 
    id 
from job_post
where 
    created_at = '2021-03-01';

【问题讨论】:

  • @Mat 你的意思是添加“日期”,所以我让它像:日期('2021-03-01')?
  • 将存储在表中的日期时间格式更改为 ISO 格式 YYYY-MM-DD hh:mm:ss 这是 SQLite 唯一有效的文本日期时间格式。然后你可以使用 SQLite 的日期函数,如date() 来解决你的问题:where date(created_at) = '2021-03-01';
  • 我会试试这个,谢谢

标签: sql sqlite


【解决方案1】:

Created_at 是日期时间类型,当您将此列与返回 false 的日期值进行比较时。

您需要将日期时间转换为日期格式以与= 运算符进行比较。

使用date(Created_at) 代替Created_at。它只会选择值的日期部分,您可以使用= 运算符将其与任何日期值进行比较。

select 
    id 
from job_post
where 
    date(created_at) = '2021-03-01';

正如@forpas 所指出的,由于日期时间格式不正确,因此上述查询将不起作用。您可以先从该字符串中提取前 10 个字符,然后将其转换为日期类型。

select 
        id 
    from job_post
    where 
        date(substr(created_at,1,10)) = '2021-03-01';

【讨论】:

  • date(created_at) 将返回null,因为created_at 没有YYYY-MM-DD hh:mm:ss 格式:dbfiddle.uk/…
  • 非常感谢。我已经修改了我的答案。 db小提琴here
  • 如果您使用substr() 获取日期部分,则不需要date()。一个简单的where substr(created_at,1,10) = '2021-03-01' 就可以了。但这里必须解决的问题是 OP 使用的时间戳格式。这必须改变。
  • 我同意你的看法。如果可能的话,应该改变它。
  • 我会试试这个,谢谢,抱歉回复晚了
猜你喜欢
  • 2020-08-25
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2022-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多