2015-12-07 259 views
0

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

感谢

+0

我不明白这个问题。 “指定月份”与当前日期有什么关系?例如,你想要在两个月前和今天午夜之间的月份的第一个月之间搜索行吗? –

+0

对不起,基本上这一年必须从sysdate – BigAl1992

+0

仍然没有关注。在你的问题中,你有谓词'BETWEEN '01 -OCT-15'和to_char(sysdate,'dd-mon-yy')'。我认为这就是我们正在谈论的。我的猜测是,您正试图想出一种方法来根据当前日期计算2015年10月1日午夜的日期。这就是为什么我问你算法是什么。你想在2个月前的这个月的第一个月?本季度的第一个?还有别的吗? –

回答

-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'); 
+1

''01 -OCT-2015''是一个字符串,不是日期 - 唯一的办法就是如果将NLS_DATE_FORMAT设置为DD-MON-YYYY,但是如果它不是或者它被改变那么它将无法工作。 – MT0

+0

除了NLS问题之外,这似乎不太可能是个人想要的。如果在给定年份的10月1日之前的任何时候运行此操作,则不会得到任何结果(假设您的NLS设置允许查询运行)。这似乎不太可能是预期的结果 –

+0

谢谢,对不起,我没有测试它。我已经修复并测试了它,按预期工作。如果你喜欢它,请竖起大拇指。 – user3224907

0

什么ü上面推断是不正确的。你已经给出了'01 -oct-15'的日期,并且你想运行相同的查询而不改变下一年的日期 。你认为结果会是什么? U将会从'01 -oct-15'获得记录,每年你都会在同一年中运行不是特定月份的查询!

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

如果U之间需要2个月(前)和TODAY,使用下面查询记录,

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')); 

如果U之间需要2个月(后),TODAY纪录,更换BETWEEN STATEMENT在上面的查询WITH ,

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

U还可以在'add_months'中将此查询更改为您需要的指定月份。 说,如果u要6个月(前)和当前日期之间的记录,

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

U可以每年都没有任何改变运行此查询。

这应该做到这一点。如果没有,请回到我身边。

相关问题