SQL:生成两个值之间的数字序列
需要在 SQL 中创建指定范围内的连续数字列表? 使用 VALUES
关键字和 JOIN
操作的组合可以轻松实现这一点。假设您需要生成一个从 1000 到 1050 的序列,每个数字占一个新行:
<code>1000 1001 1002 1003 ... 1050</code>
具体操作方法如下:
解决方案:
此方法利用小数字表的多个 JOIN
来创建更大的序列。
<code class="language-sql">WITH RECURSIVE x AS ( SELECT 0 AS n UNION ALL SELECT n + 1 FROM x WHERE n < 9999 -- Adjust upper limit as needed ) SELECT n FROM x WHERE n BETWEEN 1000 AND 1050 ORDER BY n;</code>
说明:
递归 CTE(公用表表达式): WITH RECURSIVE
语句创建一个包含从 0 开始的数字的临时表 x
。 UNION ALL
将最初的 0 与后续数字组合起来,递增直到不再满足条件 n < 9999
。 调整9999
来控制生成的最大数量。
过滤范围: WHERE
子句过滤来自 CTE 的结果,仅包含 1000 到 1050(含)之间的数字。
排序: ORDER BY n
确保数字按升序显示。
替代方案(非递归):对于较小的范围,非递归方法可能更简单:
<code class="language-sql">WITH x AS ( SELECT 1000 AS num UNION ALL SELECT 1001 UNION ALL SELECT 1002 UNION ALL -- ... add more numbers as needed ... SELECT 1050 ) SELECT num FROM x;</code>
但是,对于更大的范围,递归方法的可扩展性要好得多。
结论:
这种 SQL 技术提供了一种灵活有效的方法来在定义的边界内生成数字序列。 递归 CTE 提供了生成非常大的序列的可扩展性,使其成为各种数据生成任务的强大工具。请记住调整递归 CTE (n < 9999
) 的上限以适应所需的范围。
以上是SQL 如何生成两个指定值之间的数字范围?的详细内容。更多信息请关注PHP中文网其他相关文章!