Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come generare un intervallo di numeri tra due numeri?

Seleziona i valori non persistenti con VALUES parola chiave. Quindi usa JOIN s per generare molte, molte combinazioni (può essere esteso per creare centinaia di migliaia di righe e oltre).

Versione breve e veloce (non così facile da leggere):

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

Demo

Versione più dettagliata:

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

Demo

Entrambe le versioni possono essere facilmente estese con un WHERE clausola, limitando l'output dei numeri a un intervallo specificato dall'utente. Se vuoi riutilizzarlo, puoi definire una funzione con valori di tabella per esso.