代码之家  ›  专栏  ›  技术社区  ›  Miracle

如果日期范围在日期范围内,请全选

  •  1
  • Miracle  · 技术社区  · 7 年前
    _______________________________________
    |item    |created       |expiry       |
    _______________________________________
    |A       |01/01/2000    |01/02/2000   |
    |B       |01/04/2000    |01/06/2000   |
    |C       |01/05/2000    |01/11/2000   |
    |D       |01/02/2000    |01/05/2000   |
    |E       |01/06/2000    |01/07/2000   |
    

    我想要的是选择创建日期和到期日期之间的所有值,即输入的start\u范围和end\u范围之间的值。

    例如:。

    start_range: 01/03/2000
    end_range:   01/05/2000
    

    上述范围将具有以下值

    01/03/2000
    01/04/2000 
    01/05/2000
    

    输出如下:

    _______________________________________
    |item    |created       |expiry       |
    _______________________________________
    |B       |01/04/2000    |01/06/2000   |
    |C       |01/05/2000    |01/11/2000   |
    |D       |01/02/2000    |01/05/2000   |
    

    不包括A和E,因为它们之间的日期不在开始和结束范围之间。

    3 回复  |  直到 7 年前
        1
  •  3
  •   Jay Shankar Gupta    7 年前
    SELECT item,TO_CHAR(created,'DD/MM/YYYY') created,TO_CHAR(expiry,'DD/MM/YYYY') expiry
    FROM Table1
    WHERE created <= DATE '2000-01-05' AND expiry >= DATE '2000-01-03';
    

    输出

    ITEM    CREATED EXPIRY
    B   04/01/2000  06/01/2000
    C   05/01/2000  11/01/2000
    D   02/01/2000  05/01/2000
    

    现场演示

    http://sqlfiddle.com/#!4/bee9f/16

        2
  •  1
  •   Florin Ghita    7 年前

    可以将人类语言直接转换为您所需的sql:

    选择所有值,其中创建日期和到期日期之间的值介于输入的start\u范围和end\u范围之间

    select item, created, expiry
    from table
    where created between start_range and end_range
       and expiry between start_range and end_range;
    
        3
  •  1
  •   Nishant Gupta    7 年前

    以下是您问题的解决方案:

    SELECT Item, created, expiry
    FROM Table1
    WHERE 
    created BETWEEN DATE '2000-01-03' AND DATE '2000-01-05'
    OR
    expiry BETWEEN DATE '2000-01-03' AND DATE '2000-01-05';
    

    点击演示链接:

    http://sqlfiddle.com/#!4/bee9f/2

    另一种方式:

    SELECT Item, created, expiry
    FROM Table1
    WHERE created <= DATE '2000-01-05' AND expiry >= DATE '2000-01-03';
    

    常规查询:

    SELECT Item, created, expiry
        FROM Table1
        WHERE created <= DATE end_range AND expiry >= DATE start_range;
    

    点击演示链接:

    http://sqlfiddle.com/#!4/bee9f/7