【问题标题】:How to generate a list from a column in PLSQL? [duplicate]如何从 PLSQL 中的列生成列表? [复制]
【发布时间】:2019-12-04 09:41:28
【问题描述】:

我创建了一个查询以将日期生成为行,

SELECT ltrim(TO_CHAR(MONTH,'mm-yyyy'),'0') AS process_date
FROM 
(
    select add_months (trunc (to_date('09/01/2019','dd/mm/yyyy'), 'MM'), 1*Level -1)
           Month
    FROM Dual
        CONNECT BY Level <= MONTHS_BETWEEN(to_date('09/01/2019','dd/mm/yyyy'), to_date('09/01/2018','dd/mm/yyyy')) + 1
    order by month
)

结果是

PROCESS_DATE|
------------|
1-2019      |
2-2019      |
3-2019      |
4-2019      |
5-2019      |
6-2019      |
7-2019      |
8-2019      |
9-2019      |
10-2019     |
11-2019     |
12-2019     |
1-2020      |

我需要你的帮助来创建一个 plsql 函数来将这些行转换为列表,比如

[1-2019,2-2019,3-2019,...]

【问题讨论】:

  • 你想要一个包含所有值的字符串吗?还是您想要一个将所有值作为元素的数据结构?

标签: sql oracle plsql


【解决方案1】:
SELECT   LISTAGG(process_date, ',')  WITHIN GROUP (ORDER BY process_date)
  FROM   (SELECT   LTRIM (TO_CHAR (month, 'mm-yyyy'), '0') AS process_date
            FROM   (    SELECT   ADD_MONTHS (
                                     TRUNC (TO_DATE ('09/01/2019', 'dd/mm/yyyy'),
                                            'MM'),
                                     1 * LEVEL - 1)
                                     month
                          FROM   DUAL
                    CONNECT BY   LEVEL <=
                                     MONTHS_BETWEEN (
                                         TO_DATE ('09/01/2019', 'dd/mm/yyyy'),
                                         TO_DATE ('09/01/2018', 'dd/mm/yyyy'))
                                     + 1
                      ORDER BY   month))

【讨论】:

    【解决方案2】:

    在 ORACLE 上使用 LISTAGG 函数。

    在 MSSQL 上使用 STRING_AGG

    【讨论】:

    • 无论 OP 是否接受它,仅包含指向外部站点的链接的答案都不是一个好的答案。好的答案本身应该是完整的,必要时提供文档链接作为支持。
    • 另外,标记为[sql] 的问题只是表明该问题是关于使用SQL 语言编写数据库程序的。它不(或不应该)引用 MSSQL,我们有 [sql-server] 标记(和变体)。所以这里只需要一个Oracle解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2023-03-23
    • 2021-12-26
    • 1970-01-01
    • 2019-05-05
    • 2023-02-09
    相关资源
    最近更新 更多