如何将数字范围拆分为单个数字 Oracle

huangapple go评论132阅读模式
英文:

How to break number range to individual numbers oracle

问题

如何将数字范围拆分为单独的数字 Oracle

我的表中有以下数字范围

START_SN END_SN
850000 850003
850015 850017

并且需要以下结果

SN
850000
850001
850002
850003
850015
850016
850017
英文:

How to break number range to individual numbers oracle

I have following number ranges in my table

START_SN END_SN
850000 850003
850015 850017

And need following result.

SN
850000
850001
850002
850003
850015
850016
850017

答案1

得分: 0

以下是已翻译的部分:

  1. 样本表格:
  2. SQL> SELECT * FROM number_ranges;
  3. START_SN END_SN
  4. ---------- ----------
  5. 850000 850003
  6. 850015 850017
  7. 这是一种选项,可以返回所需的结果(并避免**重复**):
  8. SQL> SELECT start_sn + COLUMN_VALUE - 1 AS sn
  9. 2 FROM number_ranges
  10. 3 CROSS JOIN
  11. 4 TABLE (
  12. 5 CAST (
  13. 6 MULTISET ( SELECT LEVEL
  14. 7 FROM DUAL
  15. 8 CONNECT BY LEVEL <= end_sn - start_sn + 1) AS SYS.odcinumberlist))
  16. 9 ORDER BY sn;
  17. SN
  18. ----------
  19. 850000
  20. 850001
  21. 850002
  22. 850003
  23. 850015
  24. 850016
  25. 850017
  26. 7 rows selected.
  27. SQL>;
英文:

Sample table:

  1. SQL&gt; SELECT * FROM number_ranges;
  2. START_SN END_SN
  3. ---------- ----------
  4. 850000 850003
  5. 850015 850017

This is one option which returns desired result (and avoids duplicates):

  1. SQL&gt; SELECT start_sn + COLUMN_VALUE - 1 AS sn
  2. 2 FROM number_ranges
  3. 3 CROSS JOIN
  4. 4 TABLE (
  5. 5 CAST (
  6. 6 MULTISET ( SELECT LEVEL
  7. 7 FROM DUAL
  8. 8 CONNECT BY LEVEL &lt;= end_sn - start_sn + 1) AS SYS.odcinumberlist))
  9. 9 ORDER BY sn;
  10. SN
  11. ----------
  12. 850000
  13. 850001
  14. 850002
  15. 850003
  16. 850015
  17. 850016
  18. 850017
  19. 7 rows selected.
  20. SQL&gt;

答案2

得分: -1

要将一个数字范围在Oracle中拆分为单独的数字,您可以使用子查询、连接和CONNECT BY LEVEL子句等技巧的组合。以下是一个实现所需结果的示例查询:

  1. WITH number_ranges AS (
  2. SELECT 850000 AS start_sn, 850003 AS end_sn FROM dual
  3. UNION ALL
  4. SELECT 850015 AS start_sn, 850017 AS end_sn FROM dual
  5. )
  6. SELECT start_sn + LEVEL - 1 AS sn
  7. FROM number_ranges
  8. CONNECT BY LEVEL <= (end_sn - start_sn + 1)
  9. ORDER BY sn;

修改:
number_ranges 子查询用于表示您的表数据。您可以将其替换为您实际的表名。

英文:

To break a number range into individual numbers in Oracle, you can use a combination of techniques such as subqueries, joins, and the CONNECT BY LEVEL clause. Here's an example query that achieves the desired result:

  1. WITH number_ranges AS (
  2. SELECT 850000 AS start_sn, 850003 AS end_sn FROM dual
  3. UNION ALL
  4. SELECT 850015 AS start_sn, 850017 AS end_sn FROM dual
  5. )
  6. SELECT start_sn + LEVEL - 1 AS sn
  7. FROM number_ranges
  8. CONNECT BY LEVEL &lt;= (end_sn - start_sn + 1)
  9. ORDER BY sn;

Modifications:
The number_ranges subquery is used to represent your table data. You can replace it with your actual table name.

huangapple
  • 本文由 发表于 2023年6月5日 13:35:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/76403708.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定