我想創建一個包含 2 列的表 - 小時和分鐘。表將存盤一天中小時和分鐘的每個組合
例子:
| 一個標題 | 另一個標題 |
|---|---|
| 0 | 1 |
| 0 | 2 |
| 0 | 3 |
| ... | ... |
| 0 | 59 |
| 1 | 0 |
| 1 | 1 |
| 1 | 2 |
| ... | ... |
| 23 | 59 |
我想使用 Oracle SQL 填充表。我可以在 C# 中做到這一點,但我想使用 SQL 查詢來完成。我知道我必須使用 LEVEL CONNECT BY,但我對此的了解有限。
有人處理過類似的事情嗎?
uj5u.com熱心網友回復:
您可以使用簡單的分層查詢和間隔:
SELECT EXTRACT(HOUR FROM (LEVEL - 1) * INTERVAL '1' MINUTE) AS hour,
EXTRACT(MINUTE FROM (LEVEL - 1) * INTERVAL '1' MINUTE) AS minute
FROM DUAL
CONNECT BY LEVEL * INTERVAL '1' MINUTE <= INTERVAL '1' DAY;
或通過計算:
SELECT TRUNC((LEVEL - 1)/60) AS hours,
MOD(LEVEL - 1, 60) AS minutes
FROM DUAL
CONNECT BY LEVEL <= 24 * 60;
兩者都輸出:
小時 分鐘 0 0 0 1 0 2 0 3 ... ... 23 57 23 58 23 59
db<>在這里擺弄
uj5u.com熱心網友回復:
您可以根據您的要求嘗試以下具有 CONNECT BY 子句的查詢 -
WITH CTE(HOURS)AS
(
SELECT LEVEL - 1
FROM DUAL
CONNECT BY LEVEL <= 24
),
MINUTES(MINUTES) AS
(
SELECT LEVEL - 1
FROM DUAL
CONNECT BY LEVEL <= 60
)
SELECT X.HOURS,M.MINUTES
FROM CTE X
CROSS JOIN MINUTES M
ORDER BY X.HOURS,M.MINUTES;
演示。
uj5u.com熱心網友回復:
WITH CTE(HOURSS)AS
(
SELECT 0 AS HOURSS
UNION ALL
SELECT C.HOURSS 1
FROM CTE AS C
WHERE C.HOURSS 1<=23
),
MINUTESS(MINUTESS) AS
(
SELECT 0 AS MINUTESS
UNION ALL
SELECT MINUTESS 1
FROM MINUTESS
WHERE MINUTESS 1<=59
)
SELECT X.HOURSS,M.MINUTESS
FROM CTE AS X
CROSS JOIN MINUTESS M
ORDER BY X.HOURSS,M.MINUTESS
不幸的是,我無法訪問Oracle,因此無法為您提供完整的解決方案,但希望這個想法對您有所幫助(至少,您需要將 FROM DUAL 添加到查詢的相應部分)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457442.html
