我想在今天的日期和今年的指定月份之间搜索记录。如果我想在明年执行相同的查询而不改变查询,那么月份必须基于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'))
由于
答案 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');