【问题标题】:Getting records of dates - no end date in some cases [closed]获取日期记录 - 在某些情况下没有结束日期 [关闭]
【发布时间】:2017-05-22 20:20:06
【问题描述】:

数据库结构如下。

-----------------------------------
| product | start_year | end_year |
-----------------------------------
| prod_1  |    2001    |   2005   |
| prod_2  |    2002    |   2010   |
| prod_3  |    2003    |          |
| prod_4  |    2004    |   2016   |
| prod_5  |    2005    |          |
| prod_6  |    2005    |   2015   |
-----------------------------------

部分字段“end_year”为空,空白单元格表示当前年份。 我有一个参数 year,我想接收年份介于两个日期(start_year 和 end_year)之间的记录。

我可以使用此查询,但不幸的是,空单元格存在问题:

select * from table where 2003 between start_year and end_year;

【问题讨论】:

  • 我编辑了这个问题 - 事实上它并不清楚。
  • 在这种情况下 - 2003 年我想要获得产品:prod_1、prod_2、prod_3、prod_5、prod_6。
  • 我的错误 5 和 6 不包括在内 - 我的错误。
  • 对于 2004 年,我想获取产品记录:prod_1、prod_2、prod_3、prod_4。
  • 没关系,但我没有得到 end_year 列为空的记录。

标签: sql date between


【解决方案1】:

我认为您想获取 start_date 和 end_date 之间的年份行。

假设如果 start_year 小于给定年份,则应该包含它,您可以像这样使用coalesce

select *
from your_table
where 2003 between start_year and coalesce(end_year, 9999); -- a large year value

【讨论】:

    【解决方案2】:

    您的意思是您想要结束数据列为无值且开始日期为值的记录。

     SELECT  product FROM table WHERE start_year='2003' and(end_year  IS NULL OR end_year = '');
    

    【讨论】:

      【解决方案3】:

      您可以检查start_year是否大于或等于searchyear并检查end_year是否小于或等于searchyear或end_year是否为NULL

      DECLARE @SearchYear INT=2004
      
      SELECT Product
      FROM [YourTable]
      WHERE @SearchYear >= start_year AND (@StartYear >= end_year  OR end_year IS NULL)
      

      【讨论】:

        猜你喜欢
        • 2020-05-07
        • 1970-01-01
        • 2022-12-11
        • 1970-01-01
        • 2023-01-25
        • 2021-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多