Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据今天的日期,前几个月应该是完整的,而不是前几个月。为了将来的参考,请在您的问题中包含样本数据。今天有几个输入日期和不同值的预期输出会让你的问题更容易理解。尝试在上面的@APC fiddle()上使用此选项,但是>15部分应该返回JAN,因为它是前两部分_Sql_Oracle - Fatal编程技术网

Sql 根据今天的日期,前几个月应该是完整的,而不是前几个月。为了将来的参考,请在您的问题中包含样本数据。今天有几个输入日期和不同值的预期输出会让你的问题更容易理解。尝试在上面的@APC fiddle()上使用此选项,但是>15部分应该返回JAN,因为它是前两部分

Sql 根据今天的日期,前几个月应该是完整的,而不是前几个月。为了将来的参考,请在您的问题中包含样本数据。今天有几个输入日期和不同值的预期输出会让你的问题更容易理解。尝试在上面的@APC fiddle()上使用此选项,但是>15部分应该返回JAN,因为它是前两部分,sql,oracle,Sql,Oracle,根据今天的日期,前几个月应该是完整的,而不是前几个月。为了将来的参考,请在您的问题中包含样本数据。今天有几个输入日期和不同值的预期输出会让你的问题更容易理解。尝试在上面的@APC fiddle()上使用此选项,但是>15部分应该返回JAN,因为它是前两部分的一部分months@Sight . . . 当我在三月底写这篇文章时,你的问题描述了两个范围:1月1日至3月1日和2月1日至4月1日。如果你真的想要12月1日-3月1日和1月1日-4月1日,那么在第一个案例中使用-3和-2`即可。谢谢@Gor


根据今天的日期,前几个月应该是完整的,而不是前几个月。为了将来的参考,请在您的问题中包含样本数据。今天有几个输入日期和不同
值的预期输出
会让你的问题更容易理解。尝试在上面的@APC fiddle()上使用此选项,但是
>15部分应该返回JAN,因为它是前两部分的一部分months@Sight . . . 当我在三月底写这篇文章时,你的问题描述了两个范围:1月1日至3月1日和2月1日至4月1日。如果你真的想要12月1日-3月1日和1月1日-4月1日,那么在第一个
案例中使用
-3
和-2`即可。谢谢@Gordon。。。我实际上想要一月到二月(如果日期=15),我想我需要的是第一个表达式中的
-2
-2
?@Sight。我编辑了答案。我想你会想要相同的月数,不管我们在哪个月。但是您想改变月数。尝试在()上的@APC fiddle上使用此选项,但是
>15部分应该返回JAN,因为它是前两部分的一部分months@Sight . . . 当我在三月底写这篇文章时,你的问题描述了两个范围:1月1日至3月1日和2月1日至4月1日。如果你真的想要12月1日-3月1日和1月1日-4月1日,那么在第一个
案例中使用
-3
和-2`即可。谢谢@Gordon。。。我实际上想要一月到二月(如果日期=15),我想我需要的是第一个表达式中的
-2
-2
?@Sight。我编辑了答案。我想你会想要相同的月数,不管我们在哪个月。但是你想改变月数。
 SELECT * FROM my_table
 WHERE 
 //some conditions AND

 my_DATE BETWEEN trunc (sysdate, 'mm')/*current month*/ AND SYSDATE
WHERE 
 (CASE 
    when trunc (sysdate, 'dd') < 15 THEN 
    TO_CHAR(my_DATE, 'MMYYY') BETWEEN TO_CHAR((add_months(sysdate,-3)) AND TO_CHAR((add_months(sysdate,-1))
select t.*
from       mytable t
where (to_number(to_char(sysdate, 'dd')) < 15
       and t.dt >= add_months(trunc(sysdate, 'mm'),-3)
       and t.dt  < trunc(sysdate, 'mm')
      )
or    (to_number(to_char(sysdate, 'dd')) >= 15
       and t.dt >= add_months(trunc(sysdate, 'mm'),-2)
       and t.dt <= last_day(sysdate)
      )
SQL> alter session set nls_date_format = 'dd.mm.yyyy';

Session altered.

SQL> select * from test order by id;

        ID DATUM
---------- ----------
         1 20.12.2020
         2 07.01.2021
         3 15.02.2021
         4 25.02.2021
         5 10.03.2021
SQL> select t.id, t.datum
  2  from test t
  3  where t.datum >=
  4    trunc(add_months(date '&&par_sysdate',
  5                     -case when to_number(to_char(date '&&par_sysdate', 'dd')) < 15 then 2
  6                           else 1
  7                      end
  8                    ), 'mm')
  9    and t.datum < case when to_number(to_char(date '&&par_sysdate', 'dd')) < 15 then
 10                            trunc(date '&&par_sysdate', 'mm')
 11                       else date '&&par_sysdate'
 12                  end;
Enter value for par_sysdate: 2021-03-10

        ID DATUM
---------- ----------
         2 07.01.2021
         3 15.02.2021
         4 25.02.2021
SQL> undefine par_sysdate
SQL> /
Enter value for par_sysdate: 2021-03-20

        ID DATUM
---------- ----------
         3 15.02.2021
         4 25.02.2021
         5 10.03.2021

SQL>
SQL> select t.id, t.datum
  2  from test t
  3  where t.datum >=
  4    trunc(add_months(sysdate,
  5                     -case when to_number(to_char(sysdate, 'dd')) < 15 then 2
  6                           else 1
  7                      end
  8                    ), 'mm')
  9    and t.datum < case when to_number(to_char(sysdate, 'dd')) < 15 then
 10                            trunc(sysdate, 'mm')
 11                       else sysdate
 12                  end;

        ID DATUM
---------- ----------
         3 15.02.2021
         4 25.02.2021
         5 10.03.2021

SQL>
where datecol >= add_months(trunc(sysdate, 'MON'),
                            (case when extract(day from sysdate) < 15 then -2 else -1 end)
                           ) and
      datecol < add_months(trunc(sysdate, 'MON'),
                            (case when extract(day from sysdate) < 15 then 0 else 1 end)
                           )
where datecol >= add_months(trunc(sysdate, 'MON'), -2) and
      datecol < add_months(trunc(sysdate, 'MON'),
                            (case when extract(day from sysdate) < 15 then 0 else 1 end)
                           )