2016-07-27 32 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

Oracle有一個regexp_replace可以做到這一點,但我們真的需要知道你的RDBMS。 –

+1

你能確認你正在使用哪個數據庫嗎?你是否想引用在SQL查詢字符串中用作標識符的保留關鍵字?我假設這是因爲'timestamp'顯然是一種數據類型,'sequence'是一個數字序列生成器。 –

回答

0

編輯我在知道您正在使用的RDBMS之前編寫了這些內容,但爲了幫助其他人,我已經將它留下了。

我認爲你正在尋找替代品中的詞邊界,這通常是正則表達式的工作。

Oracle已經一個內置的,稱爲REGEXP_REPLACE,你可以使用這樣的事情:

regexp_replace(aa.SourceQuery, '(^|\s|\W)timestamp($|\s|\W)', '\1"timestamp"\2') 

正則表達式看的開端:

  • ^- 該行的開始OR
  • \ S - 空格字符或
  • \ W - 非單詞字符

然後,它匹配timestamp,並且必須以結束:

  • $ - 行結束時或
  • \ S - 空格字符或
  • \ W - 非單詞字符

然後,只有這樣,它才執行替換。 \ 1和\ 2用於保留在單詞的開頭和結尾處匹配的單詞邊界。

我不知道其他數據庫如何處理regexp_replace,它看起來像MySQL可以通過像this這樣的插件,但可能不是一個本地方法。

SQL Server有一個解決類似的東西here