在今天的日期和今年的指定月份之间搜索记录

时间:2015-12-07 21:07:07

标签: sql oracle

我想在今天的日期和今年的指定月份之间搜索记录。如果我想在明年执行相同的查询而不改变查询,那么月份必须基于sysdate我认为?无论如何,这正是我想要实现的目标。这是我的疑问:

SELECT *
FROM details n
WHERE n.id (SELECT p.nhno 
            FROM patient p 
            WHERE p.fname = 'James'
            AND p.surname = 'Gump'
            AND p.nhno = n.nhno
            AND n.daterecorded 
            BETWEEN '01-OCT-15' AND to_char(sysdate, 'dd-mon-yy'))

由于

2 个答案:

答案 0 :(得分:0)

你在上面推断的是不正确的。你已经给出了' 01-oct-15'并且你想在不改变的情况下运行相同的查询 明年也是。你认为结果会是什么?你将获得' 01-oct-15'每年你都要运行查询而不是同一年的特定月份!

正如你上面所说的那样,你似乎只需要同年指定月份的记录,但不是相同的' 01-oct-15'每年。

如果你需要在2个月(之前)和今天之间进行记录,请使用以下查询,

SELECT *
  FROM details n
 WHERE EXISTS (SELECT p.nhno 
                 FROM patient p 
                WHERE p.fname = 'James'
                  AND p.surname = 'Gump'
                  AND p.nhno = n.nhno
                  AND p.daterecorded BETWEEN ADD_MONTHS(SYSDATE, -2) AND TO_CHAR(SYSDATE, 'dd-mon-yy'));

如果你需要在2个月(之后)和今天之间进行记录,请更换上述查询中的声明,

'BETWEEN ADD_MONTHS(SYSDATE, 2) AND TO_CHAR(SYSDATE, 'dd-mon-yy'))'

你也可以在" add_months'中更改此查询。到你需要的指定月份。 比如,如果您想要6个月(之前)和当前日期之间的记录,

'BETWEEN ADD_MONTHS(SYSDATE, -6) AND TO_CHAR(SYSDATE, 'dd-mon-yy'))'

你可以每年运行这个查询而不做任何改动。

这应该这样做。如果没有,请回复我。

答案 1 :(得分:-1)

试试这个:

SELECT *
FROM details n
WHERE n.id (SELECT p.nhno 
            FROM patient p 
            WHERE p.fname = 'James'
            AND p.surname = 'Gump'
            AND p.nhno = n.nhno
            AND n.daterecorded 
            BETWEEN TO_DATE('01-OCT-'||(SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL),'DD-MON-YY') 
                AND TO_DATE(SYSDATE,'DD-MON-YY');