sql >> Databasteknik >  >> RDS >> Sqlserver

Hur genererar man ett intervall av siffror mellan två siffror?

Välj icke-beständiga värden med VALUES nyckelord. Använd sedan JOIN s för att generera massor av kombinationer (kan utökas för att skapa hundratusentals rader och mer).

Kort och snabb version (inte så lätt att läsa):

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

Mer utförlig version:

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

Båda versionerna kan enkelt utökas med en WHERE sats som begränsar utmatningen av siffror till ett användarspecificerat intervall. Om du vill återanvända den kan du definiera en funktion med tabellvärde för den.



  1. SQL Server-fråga:Snabb med bokstavlig men långsam med variabel

  2. Returnera endast numeriska värden i MariaDB

  3. Hur ändrar jag mysql till mysqli?

  4. Hur ställer man in tabellnamn i dynamisk SQL-fråga?