Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como gerar um intervalo de números entre dois números?


Selecione valores não persistentes com VALUES palavra-chave. Em seguida, use JOIN s para gerar muitas e muitas combinações (pode ser estendido para criar centenas de milhares de linhas e além).

Versão curta e rápida (não é tão fácil de ler):
WITH x AS (SELECT n FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) v(n))
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM x ones, x tens, x hundreds, x thousands
ORDER BY 1

Demonstração

Versão mais detalhada:
SELECT ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.n
FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) ones(n),
     (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) tens(n),
     (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) hundreds(n),
     (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) thousands(n)
ORDER BY 1

Demonstração

Ambas as versões podem ser facilmente estendidas com um WHERE cláusula, limitando a saída de números a um intervalo especificado pelo usuário. Se você quiser reutilizá-lo, poderá definir uma função com valor de tabela para ele.