【问题标题】:How to select rows by date in sqlite如何在sqlite中按日期选择行
【发布时间】:2012-10-22 22:05:57
【问题描述】:

我必须通过传递日期从数据库中选择所有行。例如获取日期为10/23/2012的所有行

sqlite db 中,我将其存储在 DATE 列中:

01/01/1900 11:00:00 AM

我试图通过使用date() 来获取日期,但我什么也没得到:

select itemId, date(dateColumn) from items

所以我只需要比较日期,但在 sqlite 中找不到如何做到这一点。

【问题讨论】:

  • 使用WHERE-clause 仅选择匹配 X 的日期
  • 我试过了。但日期也有时间部分。而且我只需要按日期获取行。在 where 子句中,我需要一些东西来获取和比较整个日期/时间的日期。我尝试过使用 date() 函数,但它不起作用。

标签: sql database sqlite


【解决方案1】:

首先,将您的日期格式化为 ISO-8601 标准。将其包装在 Date() 中以确保它被作为 DATE 处理。最后,构建您的范围,使其包含从上午 12:00 开始到第二天上午 12:00 之前的所有内容。

select itemId, dateColumn
from items
where dateColumn >= date('2012-10-23')
  AND dateColumn <  date('2012-10-23', '+1 day')

SQLite 列没有类型。但是,如果您将列与所示的 DATE 进行比较,则将列数据强制转换为日期就足够了(如果不可强制,则为 null)并且比较将正常进行。

SQLFiddle 上的示例:

create table items (
  itemid, datecolumn);
insert into items select
  1,'abc' union all select
  2,null union all select
  3,'10/23/2012 12:23' union all select
  4,'10/23/2012' union all select
  5,'2012-10-23 12:23' union all select
  6,'2012-10-23' union all select
  7,'2012-10-24 12:23' union all select
  8,'2012-10-24' union all select
  9,date('2012-10-24 12:23') union all select
  10,date('2012-10-24');

结果:

itemid  datecolumn
5       2012-10-23 12:23
6       2012-10-23

请注意,虽然第 3 行和第 4 行看起来是日期,但实际上并非如此,因为它们不符合 ISO-8601 格式,这是唯一可识别的格式SQLite。

【讨论】:

  • 写成WHERE dateColumn BETWEEN date('2012-10-23') AND date('2012-10-23', '+1 day')不是更好吗?
  • 这不会是因为这将包括 2012-10-24 的 00:00:00 时间。 &gt;=&lt; 模式专门设计为在第二天午夜之前结束。
【解决方案2】:

在 SQLite 中,没有数据类型 DATE,它存储为字符串。因此,字符串必须完全匹配才能相等。

由于我们不希望这样,您需要将日期列中的值“转换”为伪日期,并将您的参数转换为伪日期,以便可以比较它们:

SELECT itemId FROM items WHERE date(dateColumn) = date("2012-10-22");

请注意,日期命令采用格式为YYYY-MM-DD 的日期,如对this older question 的回答中进一步解释的那样。该问题还表明您可以使用BETWEEN x AND y-command 获取日期,匹配范围。

【讨论】:

    【解决方案3】:
    SELECT itemId,dateColumn FROM items WHERE dateColumn=date('YYYY-MM-DD HH:MM:SS');
    

    SQLite Reference

    【讨论】:

    • 我只能通过这个 YYYY-MM-DD(日期部分)。
    【解决方案4】:

    从项目中选择 itemId,dateColumn 其中 dateColumn = @date

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2015-01-05
      • 2011-11-12
      • 2019-02-24
      • 2019-03-05
      • 1970-01-01
      • 2011-12-11
      相关资源
      最近更新 更多