1~10,000の連番をSQLだけで作る方法です。
クエリ
SQLServerでやるとこうなります。
CREATE TABLE #nums (
num int
)
;
-- 元になる数値を用意
INSERT INTO #nums
VALUES
(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)
;
-- 必要な桁数分 cross join する
SELECT
digit1.num + digit2.num * 10 + digit3.num * 100 + digit4.num * 1000 + 1 AS result
FROM
#nums digit1 CROSS JOIN #nums digit2 CROSS JOIN #nums digit3 CROSS JOIN #nums digit4
ORDER BY result
;
解説
CROSS JOINは行数x行数が最終的に結合された結果の行数になります。そのため今回は
10x10x10x10=10000件の0~9までの数字の組み合わせになります。
上記画像は9を起点にした矢印以外は省略していますが、このように全てのレコード同士が結びつきます。結果出来上がるレコードは下図のような形式です。
このままではただの独立した4つの数字が存在してるだけであり、桁数ごとに適切に計算する必要があります。ここで
1桁目+2桁目x10+3桁目x100+4桁目x1000+1
という計算式を当てはめることで漏れなく連番が求まります。