SQL 쿼리 (oracle 11)의 텍스트 상자에서 첫 번째 텍스트 줄을 반환하려고합니다. 텍스트 상자의 내용은 다음과 같습니다.
X WITHDRAWN
Explanation.
맨 위 줄, 즉 X WITHDRAWN을 반환하고 싶습니다. 첫 번째 줄만 보도록 지정할 수 있는지 아니면 캐리지 리턴 전에 모든 텍스트를 반환하도록 지정할 수 있는지 확실하지 않습니다. 둘 중 하나가 작동합니다.
regexp_substr을 사용해야한다고 생각하지만 구문이 확실하지 않습니다. 나는 시도했다 :
regexp_substr(TABLE.TEXT,'^.*$')
그러나 그것은 작동하지 않았으므로 어떤 도움을 많이 주시면 감사하겠습니다!
편집 : 사용 된 솔루션 :
select regexp_substr(TABLE.TEXT, '[^,]+['||CHR(10)||']') from tab
편집 : 내 대답에 줄 바꿈과 캐리지 리턴이 혼합되어 있음을 알았으므로 다음 솔루션을 사용하여 텍스트 만 반환하고 추가 문자는 반환하지 않았습니다.
select
replace(replace(regexp_substr(TABLE.TEXT, '[^,]+['||CHR(10)||']'),CHR(10),''),CHR(13),'')
from tab
편집 : @Ben의 답변에 따라 솔루션을 다음과 같이 수정했습니다.
select
initcap(replace(regexp_substr(TABLE.TEXT, '.*$', 1, 1, 'm'),CHR(13),''))
from tab
Parado의 정규식은 쉼표가 아닌 모든 항목과 캐리지 리턴을 여러 번 찾습니다. 즉, 줄 바꿈이나 텍스트에 쉼표가 있으면 작동하지 않습니다.
Oracle은 m
match 매개 변수를 사용하여 여러 줄 표현식을 지원합니다 . 이 모드를 사용하면 $
각 줄의 끝과 문자열의 끝을 일치시킵니다. 이것을 사용하여 단순히 표현식을 다음과 같이 대량으로 사용할 수 있습니다.
regexp_substr(str, '.*$', 1, 1, 'm')
이는 첫 번째 문자부터 계산하여 문자열의 끝이 뒤 따르는 문자열의 첫 번째 발생 (첫 번째 행)과 일치합니다.
예로서:
with strings as (
select 'hi
hi again' as str
from dual
union all
select 'bye
and again'
from dual
)
select regexp_substr(str, '.*$', 1, 1, 'm')
from strings
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다