Sql 在一系列月份中比较月份,并在oracle中获得下一个更高的月份
换言之,我在一列中有一个字符串,它的月份类似于“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_numberxSql 在一系列月份中比较月份,并在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 | |
如果有其他更好的方法在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被认为是字符串检查的最新解决方案,您将如何对添加到_编号的数据进行排序