在使用 REGEXP_REPLACE WITH LISTAGG 函数方面需要帮助
Need help in using REGEXP_REPLACE WITH LISTAGG function
WITH CTE AS (
SELECT
ID,
X.A_NO::INT AS A_NO,
REGEXP_REPLACE(TEXT_COL,'\::abcd::0|:::xyza::',' ') as TEXT_COL
FROM table X
WHERE date = '2022-02-02'
AND T_ID IN('12345','56789')
ORDER BY A_NO
)
SELECT
ID,
LISTAGG (distinct TEXT_COL , ',') WITHIN GROUP (ORDER BY TEXT_COL) AS TEXT_COL_A
FROM CTE
GROUP BY ID;
当我运行上述查询时,我得到如下所述的结果:
ID TEXT_COL_A
12345 ,abc_xyz_ecom_data
56789
第二行的 TEXT_COL_A 值为空。我想删除第一行中的逗号并在结果中将第二行更新为 NULL。谁能指导我如何实现这一目标?
第二个问题可以用IFNULL
解决
SELECT 'a' as a, IFNULL(a,'a was null') as b, null as c, IFNULL(c,'c was null') as d;
给出:
A
B
C
D
a
a
c was null
删除内容的第一个问题是使用 TRIM 的结尾,但要仅使用开头或结尾 trim 使用 LTRIM 或 RTRIM
SELECT ',,a,,' as a, trim(a,','), ltrim(a,','), rtrim(a,',');
A
TRIM(A,',')
LTRIM(A,',')
RTRIM(A,',')
,,a,,
a
a,,
,,a
WITH CTE AS (
SELECT
ID,
X.A_NO::INT AS A_NO,
REGEXP_REPLACE(TEXT_COL,'\::abcd::0|:::xyza::',' ') as TEXT_COL
FROM table X
WHERE date = '2022-02-02'
AND T_ID IN('12345','56789')
ORDER BY A_NO
)
SELECT
ID,
LISTAGG (distinct TEXT_COL , ',') WITHIN GROUP (ORDER BY TEXT_COL) AS TEXT_COL_A
FROM CTE
GROUP BY ID;
当我运行上述查询时,我得到如下所述的结果:
ID TEXT_COL_A
12345 ,abc_xyz_ecom_data
56789
第二行的 TEXT_COL_A 值为空。我想删除第一行中的逗号并在结果中将第二行更新为 NULL。谁能指导我如何实现这一目标?
第二个问题可以用IFNULL
解决SELECT 'a' as a, IFNULL(a,'a was null') as b, null as c, IFNULL(c,'c was null') as d;
给出:
A | B | C | D |
---|---|---|---|
a | a | c was null |
删除内容的第一个问题是使用 TRIM 的结尾,但要仅使用开头或结尾 trim 使用 LTRIM 或 RTRIM
SELECT ',,a,,' as a, trim(a,','), ltrim(a,','), rtrim(a,',');
A | TRIM(A,',') | LTRIM(A,',') | RTRIM(A,',') |
---|---|---|---|
,,a,, | a | a,, | ,,a |