您的位置:首页 > 数据库 > Oracle

oracle 查询结果用逗号隔开(非存储过程)

2013-12-19 21:03 513 查看
1.死的

SELECT trim(REGEXP_SUBSTR (replace('aa,bb,cc',''), '[^,]+', 1,ROWNUM)) as keywords
from dual t
CONNECT BY ROWNUM <=length(regexp_replace('aa,bb,cc','[^,]',''))+1
--LENGTH ('aa,bb,cc')-LENGTH (REPLACE ('aa,bb,cc',','))+1  和上面一样


2.活的俩种方法

(1).

SELECT  distinct trim(REGEXP_SUBSTR(replace(ttt.keywords,' ',','), '[^,]+', 1,ttt.lv)) as keywords
from (
select *
from (select t.keywords,nvl(length(regexp_replace(replace(t.keywords, ' ', ','),'[^,]','')),0) + 1 cnt
from (select distinct keywords from TEMP_TBL_KB_VIDEO_KEYWORD where keywords  IS NOT NULL) t) tt,
(SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 100) cn
where cn.lv <= tt.cnt
) ttt


(2).

SELECT VIDEOID AS VIDEO_ID, KEYWORD AS KEYWORD
FROM (WITH VKD AS (SELECT VIDEOID,
REPLACE(TRIM(KEYWORDS), ' ', ',') AS KEYWORDS
FROM TEMP_TBL_KB_VIDEO_KEYWORD VVI_A
WHERE KEYWORDS IS NOT NULL

)
SELECT VIDEOID,
SUBSTR(T.KEYWORDS_LOOP,
INSTR(T.KEYWORDS_LOOP, ',', 1, C.LV) + 1,
INSTR(T.KEYWORDS_LOOP, ',', 1, C.LV + 1) -
(instr(T.KEYWORDS_LOOP, ',', 1, C.LV) + 1)) AS KEYWORD
FROM (SELECT VIDEOID,
',' || KEYWORDS || ',' AS KEYWORDS_LOOP,
LENGTH(KEYWORDS || ',') -
NVL(LENGTH(REPLACE(KEYWORDS, ',')), 0) AS CNT
FROM VKD) T,
(SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 100) C
WHERE C.LV <= T.CNT)
WHERE KEYWORD IS NOT NULL
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: