2016-07-27 5 views
1

대체 함수를 사용하여 몇 가지 키워드를 인용 부호로 추가하고 있습니다. 그러나이 대체품은 아래의 경우와 같이 몇 가지 경우에는 작동하지 않습니다.SQL에서 바꾸기를 사용한 문자열 조작

아래 예를 참조하십시오.

replace(replace(aa.SourceQuery,'sequence','"sequence"'),'timestamp','"timestamp"') 

하기 전에 :

select timestamp, SparkTimeStamp 
from SparkRecordCounts 

후 :

쿼리, 내가이 원하는 그러나

select "timestamp", Spark"timestamp" 
from SparkRecordCounts 

같은 :

select "timestamp", Sparktimestamp 
from SparkRecordCounts 
+4

당신의 RDBMS는 무엇인가에 대한 해결책을 가지고? 대체 기능의 정규 표현식을 지원합니까? –

+0

오라클은이를 수행 할 regexp_replace를 가지고 있지만 실제로 RDBMS를 알아야합니다. –

+1

사용중인 데이터베이스를 확인할 수 있으며 SQL 쿼리 문자열에서 식별자로 사용되는 예약 된 키워드를 인용하려고합니까? 분명히'timestamp'는 데이터 타입이고'sequence'는 숫자 시퀀스 생성기이기 때문에 이것을 가정합니다. –

답변

0

EDIT 당신이 사용하고 있던 RDBMS를 알기 전에이 글을 썼지 만 다른 사람을 돕기 위해 남겨 두었습니다.

대체로 정규 표현식의 대체 단어 경계를 찾고 있다고 생각합니다.

오라클은 하나, 내장 REGEXP_REPLACE라고, 당신은 같은 것을 사용할 수있다 :

정규 표현식가 시작에 보이는
regexp_replace(aa.SourceQuery, '(^|\s|\W)timestamp($|\s|\W)', '\1"timestamp"\2') 

:

  • ^- 라인의 시작 또는
  • \ S - 공백 문자 또는 W \
  • - 비 단어 문자

는 그 다음 timestamp 일치와로 끝나야합니다 :

  • $ - 라인의 끝 부분
  • \ S - 공백 문자 또는 W \
  • - 비 단어 문자

그런 다음에만 교체를 수행합니다. \ 1과 \ 2는 단어의 시작과 끝에서 일치하는 단어 경계를 보존하는 데 사용됩니다.

다른 데이터베이스가 regexp_replace를 어떻게 처리하는지 잘 모르겠지만 mysql은 this과 같은 플러그인을 통해 표시 될 수 있지만 기본 방법이 없을 수 있습니다.

SQL Server는 비슷한 here