Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да генерирам диапазон от числа между две числа?

Изберете несъхранени стойности с VALUES ключова дума. След това използвайте JOIN s за генериране на много и много комбинации (може да бъде разширено за създаване на стотици хиляди редове и повече).

Кратка и бърза версия (не е толкова лесна за четене):

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

Демо

По-подробна версия:

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

Демо

И двете версии могат лесно да бъдат разширени с WHERE клауза, ограничаваща изхода на числа до определен от потребителя диапазон. Ако искате да го използвате повторно, можете да дефинирате функция с таблична стойност за него.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да премахнете ограничението по подразбиране на SQL, без да знаете името му?

  2. Вътрешни елементи за репликация на транзакции на SQL Server

  3. Как да ИЗБЕРЕТЕ *, но без имената на колони трябва да са уникални във всеки изглед

  4. RODBC odbcDriverConnect() Грешка при свързване

  5. Има ли еквивалент на SELECT ... INTO OUTFILE в SQL Server Management Studio?