현재 특정 필드안에 아래처럼 여러 라인으로 내용이 들어가 있습니다.
app date public
get cc private
main app cc
컬럼이
name, data(검색할 대상)
일때
특정 문자가 포함된 부분을 검색하면서
해당 라인을 같이 표현 할 수 있는 방법이 있을까요?
예를들어 public 을 like 조건으로 검색할경우
data 필드 안에는 app date public 내용으 나왔으면 좋겠습니다.
추가적으로 내용안에 번호를 매겨 다른 필드라도 좋으니 name | 1 | app date public 이런식으로 표현될수 있는 방법도 있을까요?
한필드에 개행문자 포함해 여러줄의 데이터가 들어가 있는건가요? 아니면 한줄의 데이터가 여러건 들어간건지요?
name | 1 | app date public << 이 내용은 '|' 문자 포함해 한 필드로 표시하시려는 건지요?
한필드안에 여러줄의 데이터가 들어있습니다.
결과를 필드별로 예시로 적은 부분입니다.
WITH t AS
(
SELECT 1 pk, 'name' nm, 'app date public' v
UNION ALL SELECT 2, 'name2', 'get cc private'
UNION ALL SELECT 3, 'name3', 'app1 date1 public
get cc private
main app cc
public cc'
)
, t1 AS
(
SELECT pk, nm
, 1 lv
, CASE p WHEN 0 THEN v ELSE SUBSTRING(v, 1, p-1) END x
, CASE p WHEN 0 THEN '' ELSE SUBSTRING(v, p+2, 9999) END v
FROM (SELECT pk, nm, v, CHARINDEX(CHAR(13), v) p FROM t) a
WHERE v LIKE '%public%'
UNION ALL
SELECT pk, nm
, lv + 1 lv
, CASE p WHEN 0 THEN v ELSE SUBSTRING(v, 1, p-1) END x
, CASE p WHEN 0 THEN '' ELSE SUBSTRING(v, p+2, 9999) END v
FROM (SELECT pk, nm, v, lv, CHARINDEX(CHAR(13), v) p FROM t1) a
WHERE v != ''
)
SELECT pk, nm, lv, x
FROM t1
WHERE x LIKE '%public%'
ORDER BY pk, lv
;