【问题标题】:sqlite Select specific day of specific month and none specific monthsqlite 选择特定月份的特定日期,不选择特定月份
【发布时间】:2015-06-14 14:41:31
【问题描述】:

我要做的是从时间戳中选择特定月份和特定日期。我试过的是这样的:

SELECT t FROM test WHERE t BETWEEN '2015-08-01 00:00:00' AND '2015-08-01 23:59:59';

8 是特定月份,1 是特定日期,但这不会返回任何内容。

我想做的另一件事是在一年中的每个月中选择一个我尝试过但我知道是错误但我不知道该怎么做的特定日子:

SELECT t FROM test WHERE t BETWEEN '2015-01-12 00:00:00' AND '2015-24-12 23:59:59';

我知道为什么这不起作用,因为我将每个时间戳从第一个月的一天到上个月的同一天,但我该怎么做呢?

编辑:我发现为什么它不适用于第一个示例,我的一天变量包含一个数字,所以当它低于 10 时它只说 # 而不是 0#

【问题讨论】:

  • 请编辑您的问题并提供示例数据。一个小的 SQL Fiddle 也可以帮助我们了解问题所在。

标签: sql sqlite date timestamp


【解决方案1】:

您可以为此使用LIKE 子句。如果您在 :59 之后有几毫秒,那么您的 between 也不适用于边缘情况。

WHERE t LIKE '2015-08-01 %'

和:

WHERE t LIKE '2015-%-12 %'

此外,关于优化,timestamp 或类似的具有文本亲和力(即使文档似乎暗示它是数字)。如果您有索引,它应该允许like optimization,但如果您可以管理它,使用范围可能会更好。我会检查查询计划。

【讨论】:

  • 查询计划是什么意思?我还是 sql 新手,正在做一些试验和错误,之前没有听说过查询计划?
  • @Sumsar1812 当您执行查询时,它会“计划”以最佳方式执行它。有时您会创建索引以加快对某些字段的访问(例如在where 子句中)。如果您是在少量数据上执行此操作,或者作为测试或一次性使用,则可能无关紧要。但是,如果它会变得很大,或者使用很多,那么您将需要确保它运行良好。一种方法是检查查询计划。
猜你喜欢
  • 2011-12-30
  • 2016-08-26
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 2013-02-20
  • 2017-08-30
相关资源
最近更新 更多