2013-08-08 4 views
3

Oracle 11g에서 SQL 개발자와 협력 중입니다. 이 라인을 따라 뭔가가 보이는 쿼리가 있습니다.공백, 탭 및 캐리지 리턴 바꾸기

return_sku 열에서
SELECT [column], [column], [column],...... rs.notes 
FROM [table], [table], [table]............ return_sku rs 
WHERE [conditions] AND [conditions] AND [conditions] 

탭, 공백 및 줄 바꿈이 있습니다 나는이 공백, 캐리지 리턴을 모두 확인해야합니다 (I는?이 캐리지 리턴이라고 생각) 내가 내 쿼리를 실행할 때 탭이 사라집니다.

저는 SQL을 처음 접했지만 가장 많이 사용 된 검색 결과는 REPLACE 기능입니다. 이 방법을 사용하는 방법을 전혀 알지 못합니다. 여러 가지 방법으로 시도해 보았습니다. 나는 다음을 시도했다; 어떻게이 기능을 올바르게 사용합니까

ORA-00904: "RS"."NOTES": invalid identifier 
00904. 00000 - "%s: invalid identifier" 
*Cause:  
*Action: 
Error at Line: 3 Column: 531 

:

SELECT [column], [column], [column],...... REPLACE(rs.notes, Char(10), '') 
FROM [table], [table], [table]............ return_sku rs 
WHERE [conditions] AND [conditions] AND [conditions] 

이 오류 메시지를 제공?

+1

오류는'return_sku' 테이블에'notes' 열이 없다는 것을 나타냅니다. 별칭을 잃었거나 하위 쿼리에 테이블과 별칭이 있습니다. 실제로 동작을 나타내는 무언가를 보여주기보다는 이러한 코드를 다시 타이핑 할 때 문제가 발생합니다. 특히 오타가있는 경우 실제 문제를 놓칠 수 있습니다. 어쩌면 하나의 테이블에서만 선택하여 동일한 오류를 가져올 수 있으며 테이블 정의를 표시 할 수 있습니다. 'char (10)'이 아닌'chr (10)'이어야합니다. –

답변

6

오라클에서는 문자를 제거하려는 경우 replace 호출의 세 번째 인수를 생략 할 수 있으며 문자 코드의 함수는 char()가 아닌 chr()입니다.

그래서 선은 SELECT ... replace(rs.notes,chr(10)) ...

+0

나는 여러 프로젝트의 한가운데에 있었고 대답을 찾지 만 여기에서 요청한 것을 완전히 잊어 버렸기 때문에 이것을 간과했다. 응답 해주셔서 감사합니다. 이것은 실제로 내가 우연히 만난 것입니다. – aCarella

4

이는 ORA-00904, 나는 오타가 의심 해결하지 않는 것,하지만 정말 실제 코드를 보지 않고 말할 수 없다. 그러나 여러 문자를 제거해야하는 경우, 당신은 대체 중첩 할 수 있습니다

with return_sku as (
    select 'This is '||chr(9)|| ' a split'||chr(10)||chr(13)||'line' as notes 
    from dual 
) 
select replace(replace(replace(replace(rs.notes, chr(10)), chr(13)), chr(9)), ' ') 
from return_sku rs; 

REPLACE(REPLACE(
---------------- 
Thisisasplitline 
...하지만 regexp_replace이 경우 가능성이 조금 더 비싼, 더 관리 할 수 ​​있습니다

with return_sku as (
    select 'This is '||chr(9)|| ' a split'||chr(10)||chr(13)||'line' as notes 
    from dual 
) 
select regexp_replace(rs.notes, '[ '||chr(10)||chr(13)||chr(9)||']') 
from return_sku rs; 

REGEXP_REPLACE(R 
---------------- 
Thisisasplitline 

I을 둘 모두에 라인 피드 (chr(10))와 캐리지 리턴 (chr(13))이 모두 포함되었습니다. 과잉일지도 모른다. 당신이 어떤 공백을 제거하려는 경우 그러나, 이것은 더 간단 가져옵니다

select regexp_replace(rs.notes, '\s') ... 

또는 POSIX의 버전 : replace 또는 regexp_replace 세 번째 인수가 null의 경우 @randcd으로

select regexp_replace(rs.notes, '[[:space:]]') ... 

는 지적을 (또는 Oracle에서 null과 동일한 빈 문자열)을 제공 할 필요가 없습니다.

+0

늦은 응답에 대해 사과드립니다. 나는 여러 프로젝트의 한가운데에 있었고 대답을 찾지 못했지만 여기서 그것을 간과 한 것을 완전히 잊어 버렸습니다. 응답 해주셔서 감사합니다. – aCarella