在Oracle SQL中打印字母数字模式

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

Printing a pattern of alphanumeric numbers in Oracle sql

问题

SELECT语句中如何创建一个临时表,用于保存字母数字组合的列表。

从temp中选择yearlyQuarters;

2023Q1
2022Q4
2022Q3
2022Q2
2022Q1
2021Q4
2021Q3
2021Q2
2021Q1
......

我尝试创建临时数据:

WITH t(n) AS (
SELECT 1900 from dual
UNION ALL
SELECT n+1 from t WHERE n < 3000)
SELECT * FROM t;

我不确定如何将季度信息添加到这些数字中。

英文:

How can I create a temp table in a sql select statement which will hold list of alphanumeric numbers.

Select yearlyQuarters from temp;

  1. 2023Q1
  2. 2022Q4
  3. 2022Q3
  4. 2022Q2
  5. 2022Q1
  6. 2021Q4
  7. 2021Q3
  8. 2021Q2
  9. 2021Q1
  10. ......

I tried creating the temp data as

  1. WITH t(n) AS (
  2. SELECT 1900 from dual
  3. UNION ALL
  4. SELECT n+1 from t WHERE n &lt; 3000)
  5. SELECT * FROM t;

I am not sure how can I add the quarter details to the numbers.

答案1

得分: 0

以下是翻译好的部分:

您可以将结果与季度进行交叉连接。例如:

  1. WITH t(n) AS (
  2. SELECT 2000 from dual
  3. UNION ALL
  4. SELECT n+1 from t WHERE n &lt; 2003)
  5. SELECT t.n || 'Q' || y.q
  6. FROM t
  7. cross join (
  8. select 1 as q from dual
  9. union all select 2 from dual
  10. union all select 3 from dual
  11. union all select 4 from dual
  12. ) y

结果:

  1. T.N||'Q'||Y.Q
  2. -------------
  3. 2000Q1
  4. 2000Q2
  5. 2000Q3
  6. 2000Q4
  7. 2001Q1
  8. 2001Q2
  9. 2001Q3
  10. 2001Q4
  11. 2002Q1
  12. 2002Q2
  13. 2002Q3
  14. 2002Q4
  15. 2003Q1
  16. 2003Q2
  17. 2003Q3
  18. 2003Q4

请参见db<>fiddle中的示例。

英文:

You can cross-join the result with the quarters. For example:

  1. WITH t(n) AS (
  2. SELECT 2000 from dual
  3. UNION ALL
  4. SELECT n+1 from t WHERE n &lt; 2003)
  5. SELECT t.n || &#39;Q&#39; || y.q
  6. FROM t
  7. cross join (
  8. select 1 as q from dual
  9. union all select 2 from dual
  10. union all select 3 from dual
  11. union all select 4 from dual
  12. ) y

Result:

  1. T.N||&#39;Q&#39;||Y.Q
  2. -------------
  3. 2000Q1
  4. 2000Q2
  5. 2000Q3
  6. 2000Q4
  7. 2001Q1
  8. 2001Q2
  9. 2001Q3
  10. 2001Q4
  11. 2002Q1
  12. 2002Q2
  13. 2002Q3
  14. 2002Q4
  15. 2003Q1
  16. 2003Q2
  17. 2003Q3
  18. 2003Q4

See example at db<>fiddle.

答案2

得分: 0

从日期 1900-01-01 开始,重复添加3个月以获取下一个季度,然后使用 TO_CHAR 格式化它:

  1. SELECT TO_CHAR(
  2. ADD_MONTHS(DATE '1900-01-01', 3 * LEVEL - 3),
  3. 'YYYY"Q"Q'
  4. ) AS yearly_quarters
  5. FROM DUAL
  6. CONNECT BY ADD_MONTHS(DATE '1900-01-01', 3 * LEVEL - 3) <= SYSDATE;

fiddle

英文:

Start with the date 1900-01-01 and repeatedly add 3 months to get the next quarter and then use TO_CHAR to format it:

  1. SELECT TO_CHAR(
  2. ADD_MONTHS(DATE &#39;1900-01-01&#39;, 3 * LEVEL - 3),
  3. &#39;YYYY&quot;Q&quot;Q&#39;
  4. ) AS yearly_quarters
  5. FROM DUAL
  6. CONNECT BY ADD_MONTHS(DATE &#39;1900-01-01&#39;, 3 * LEVEL - 3) &lt;= SYSDATE;

fiddle

huangapple
  • 本文由 发表于 2023年2月7日 01:49:34
  • 转载请务必保留本文链接:https://go.coder-hub.com/75364835.html
匿名

发表评论

匿名网友

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

确定