oracle 使用SQL检查Armstrong编号[重复]

yhuiod9q  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(115)

此问题已在此处有答案

How to select only armstrong numbers from the list?(4个答案)
12天前关闭
我想在Oracle SQL中写一个查询,检查一个数字是否是Armstrong。
互联网资源中的大多数查询都是PL/SQL,但我只需要在Oracle SQL中使用它。

5anewei6

5anewei61#

您可以使用递归子查询因式分解子句递归每个数字的数字,并对数字的立方求和以查找匹配的数字:

WITH rsqfc ( value, pos, total ) AS (
  SELECT value,
         1,
         POWER(SUBSTR(value, 1, 1), LENGTH(value))
  FROM   table_name
  WHERE  POWER(SUBSTR(value, 1, 1), LENGTH(value)) <= value
UNION ALL
  SELECT value,
         pos + 1,
         total + POWER(SUBSTR(value, pos + 1, 1), LENGTH(value))
  FROM   rsqfc
  WHERE  pos < LENGTH(value)
  AND    total + POWER(SUBSTR(value, pos + 1, 1), LENGTH(value)) <= value
)
SEARCH DEPTH FIRST BY value SET order_id
SELECT value
FROM   rsqfc
WHERE  pos = LENGTH(value)
AND    total = value;

其中,对于样本数据:

CREATE TABLE table_name (value) AS
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 400;

输出:
| 值|
| --|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 153 |
| 370 |
| 371 |
fiddle

相关问题