ORACLE SQL: получить все целые числа между двумя числами - PullRequest
20 голосов
/ 21 сентября 2009

Есть ли способ выбрать числа (целые числа), которые включены между двумя числами с SQL в Oracle; Я не хочу создавать PL / SQL процедуру или функцию.

Например, мне нужно получить числа от 3 до 10. Результатом будут значения 3,4,5,6,7,8,9,10.

Thx.

Ответы [ 12 ]

0 голосов
/ 09 мая 2018

Я хочу поделиться полезным запросом, который преобразует строку с запятыми и разделенный '-' список чисел в эквивалентный расширенный список чисел:

Пример, который преобразует '1,2,3,50-60' в

1
2
3
50
51
...
60
select distinct * from (SELECT (LEVEL - 1) + mini as result FROM (select REGEXP_SUBSTR (value, '[^-]+', 1, 1)mini ,nvl(REGEXP_SUBSTR (value, '[^-]+', 1, 2),0) maxi from (select REGEXP_SUBSTR (value, '[^,]+', 1, level) as value from (select '1,2,3,50-60' value from dual) connect by level <= length(regexp_replace(value,'[^,]*'))+1)) CONNECT BY Level <= (maxi-mini+1)) order by 1 asc;

Вы можете использовать его как представление и параметризовать строку '1,2,3,50-60'

0 голосов
/ 23 декабря 2011

Я только что выполнил табличную функцию для этого в SQL-сервере, если кому-то интересно, это работает безупречно.

CREATE FUNCTION [dbo].[NumbersBetween]
(
    @StartN int,
    @EndN int
)
RETURNS 
@NumberList table
(
    Number int
)

AS

BEGIN

WHILE @StartN <= @EndN
    BEGIN
    insert into @NumberList
    VALUES (@StartN)
    set @StartN = @StartN + 1
    END

Return

END
GO

Если вы запустите запрос: «выберите * из dbo.NumbersBetween (1,5)» (без кавычек, конечно), результат будет

Number
-------
1
2
3
4
5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...