【问题标题】:sql query to filter dates of this weeksql查询过滤本周的日期
【发布时间】:2012-11-07 05:21:01
【问题描述】:

我是 sql 查询的新手,任何人都可以帮助我为以下条件编写查询 我在“成员”表中有一个名为“dob”的列。 注意:dob 数据类型是文本。 像这样的价值观:

dob
===
7-November-1980
9-November-1981
10-November-1982
5-May-1990

现在要获取本周的生日(即)从 7-11-2012 到 13-11-2012 ,我想将结果作为前 3 条记录。为此我写了这样的查询

select * from members where dob in('7-November','8-November','9-November','10-November','11-November','12-November','13-November')

但它从不返回任何结果。任何人都请帮助我,我怎样才能得到它。非常感谢你。

【问题讨论】:

  • 为什么你不用IN operator中的值写年份
  • IN 语句将寻找完全匹配。为什么日期格式为文本?可以改一下格式吗?如果是这样,我认为这将更容易解决。
  • 除了改变列的格式之外没有别的办法吗,因为它会在我的项目中发生很大的变化,它可能会导致其他模块无法工作
  • 当然,你可以让它工作。但我认为我们需要更多信息才能正确解决它。如何选择搜索条件/周?
  • 搜索条件是从今天到下一周。我们只需要比较日期和月份,

标签: sql sqlite android-sqlite


【解决方案1】:

您的日期未存储在SQLite's supported date formats 之一中,因此此查询变得相当复杂:

SELECT *
FROM members
WHERE dob LIKE '7-November%' OR
      dob LIKE '8-November%' OR
      dob LIKE '9-November%' OR
      dob LIKE '10-November%' OR
      dob LIKE '11-November%' OR
      dob LIKE '12-November%' OR
      dob LIKE '13-November%'

如果您以固定字段宽度的YYYY-MM-DD 格式存储日期,您可以使用如下更简单的查询:

SELECT *
FROM members
WHERE SUBSTR(dob, 6, 5) BETWEEN '11-07' AND '11-13'

【讨论】:

    【解决方案2】:

    您正在进行精确的文本匹配,即 1980 年 11 月 7 日不等于 11 月 7 日,这就是您的查询未返回任何结果的原因。尝试使用 mysql 日期函数将文本转换为日期时间,从中提取日期-月份,然后使用范围查询来获取结果。 检查http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 2021-10-21
      • 2011-05-25
      • 1970-01-01
      • 2019-01-14
      • 2013-08-16
      • 2016-07-10
      相关资源
      最近更新 更多