Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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 在一系列月份中比较月份,并在oracle中获得下一个更高的月份_Sql_Oracle_Sorting_Listagg - Fatal编程技术网

Sql 在一系列月份中比较月份,并在oracle中获得下一个更高的月份

Sql 在一系列月份中比较月份,并在oracle中获得下一个更高的月份,sql,oracle,sorting,listagg,Sql,Oracle,Sorting,Listagg,换言之,我在一列中有一个字符串,它的月份类似于“3-6-9-12”。我必须通过比较字符串中的月份和sysdate中的extractmonth来获得下一个处理月份。 e、 g在5月份是5,所以我想要6作为下一个月的字符串。 7月份是7,所以下个月应该是9。如果可能的话,我想在内联查询中这样做。 我试图通过这个查询获得下个月的数据- 选择instrx,从sysdate开始提取月份+1 从sysdate | | | |‘-3-6-2-12’、‘[^-]+’1,level’-’到sysdate | |

换言之,我在一列中有一个字符串,它的月份类似于“3-6-9-12”。我必须通过比较字符串中的月份和sysdate中的extractmonth来获得下一个处理月份。 e、 g在5月份是5,所以我想要6作为下一个月的字符串。 7月份是7,所以下个月应该是9。如果可能的话,我想在内联查询中这样做。 我试图通过这个查询获得下个月的数据-

选择instrx,从sysdate开始提取月份+1 从sysdate | | | |‘-3-6-2-12’、‘[^-]+’1,level’-’到sysdate | | |‘-3-6-2-12’、‘[^-]+’1,levelx的组顺序中选择ListAgTo|numberregexp | substrextractmonth 从sysdate | |‘-3-6-2-12’,‘[^-]+’,1开始,通过regexp_substrextractmonth进行连接,级别不为空,顺序为to_numberx


如果有其他更好的方法在sql中查找下一个月,请提供帮助。

您只需对月份和季度进行映射,然后选择季度即可

     with date_mapping as(select 1 month,3 quater from dual union all
                         select 2 month,3 quater from dual union all
                         select 3 month,3 quater from dual union all
                         select 4 month,6 quater from dual union all
                         select 5 month,6 quater from dual union all
                         select 6 month,6 quater from dual union all
                         select 7 month,9 quater from dual union all
                         select 8 month,9 quater from dual union all
                         select 9 month,9 quater from dual union all
                         select 10 month,12 quater from dual union all
                         select 11 month,12 quater from dual union all
                         select 12 month,12 quater from dual),
     data as (select   date '2020-12-01' date1 from dual)
     select ds.quater from data dd ,date_mapping ds
     where extract (month from dd.date1)=ds.month
如果你的四分之一不是固定的,你可以使用下面的

WITH quaters
 AS (SELECT to_number(Regexp_substr(quaters, '[^-]+', 1, LEVEL)) quater
     FROM   (SELECT ( '1-4-7-10' ) AS quaters
             FROM   dual)
     CONNECT BY LEVEL <= Regexp_count(quaters, '[^-]+')),
 min_max_quater
 AS (SELECT Max(quater) max_quater,
            Min(quater) min_quater
     FROM   quaters),
 date_mapping
 AS (SELECT lvl         month,
            Min(quater) quater
     FROM   dual,
            quaters
            cross join (SELECT LEVEL lvl
                        FROM   dual
                        CONNECT BY LEVEL < = 12)
     WHERE  lvl <= quater
     and lvl <> quater
     GROUP  BY lvl
     UNION ALL
     SELECT LEVEL month,
            min_quater
     FROM   min_max_quater
     WHERE  LEVEL > max_quater
     CONNECT BY LEVEL <= 12
     UNION ALL
     SELECT max_quater,
            min_quater
            FROM 
        min_max_quater
     )
  SELECT ds.quater
   FROM   dual dd,
   date_mapping ds
  WHERE  Extract (month FROM sysdate) = ds.month 

完全不清楚。。。。。特别是这篇文章:7月份的月份是7,所以我应该在下个月加上+2得到9…但是,正如你所知道的问题是什么,问题是关于12个月的,然后看看这个函数谢谢你的及时响应,我会再次写它-我有一个字符串,它的值是'3-6-9-12',这是月份。现在,无论我从sysdate获取哪个月,都应该与这个字符串进行比较,并将下一个月的日期提供给我。对于今天的日期,我将得到5作为monthsysdate,所以现在我应该得到6作为字符串的下个月。如果我的当前月份是7月7日,我应该从字符串中得到下一个月的9。希望这次是清楚的。不,不清楚,因为7月之后我们有8月……为什么要将此信息存储在字符串中?如果月份是12,但12不在字符串中,会发生什么?很好的方法,但我的季度月份不是固定的,它们也可以是2-5-8-11,我的简单问题是从字符串中获取下一个与我当前月份相比较的数字。因此,在5月份的这种情况下,它应该给出8作为下一个季度或数字。如果给出季度-月份不固定的解决方案,或者我可以得到一个简单的字符串,将我当前月份也添加到字符串中,而不是行中,而是一列中,就像之前一样3-6-9-12我应该将我的五月月份添加到排序字符串中,如3-5-6-9-12,这样我就可以轻松获得下个月的位置。我已经在上面的问题中粘贴了我的sql查询,如果月份是12,而您的字符串是1-4-7-10,那么添加的字符串将是1-4-7-10-12,既然1-4-7-10被认为是字符串检查的最新解决方案,您将如何对添加到_编号的数据进行排序