2012-12-11 39 views
1

我需要一個選擇查詢,增加了一個空間基礎上的大寫字母的位置數據的選擇查詢,即「HelpMe」使用此查詢將顯示爲「幫幫我」 。請注意,我不能使用存儲的函數來執行此操作,因爲它必須在查詢本身中完成。數據的長度可變,查詢必須在SQL中。任何幫助將不勝感激。 感謝分開,顯示加入的話不使用的功能

+1

什麼口味SQL的?我正在考慮像查詢中的正則表達式那樣可能會這樣做...... – RonaldBarzell

+0

您使用的是什麼RDMS? – valex

+0

我正在使用MSSQL 2012 – Thinker

回答

1

您需要使用用戶定義的函數,直到MS給我們支持正則表達式。解決方案將是這樣的:

SELECT col1, dbo.RegExReplace(col1, '([A-Z])',' \1') FROM Table 

奧爾多這將產生領先的空間,你可以刪除與TRIM。

更換正規表示法功能:

http://connect.microsoft.com/SQLServer/feedback/details/378520

關於dbo.RegexReplace你可以閱讀:

TSQL Replace all non a-z/A-Z characters with an empty string

+0

不能使用存儲的功能。 RegExReplace是一個存儲功能 - 不是嗎? – Paparazzi

+0

快速的問題,我可以使這一部分的選擇,即選擇col1 = dbo.RegExReplace(col1,'([AZ])','\ 1')爲FN,其中col1 ='WhatEver',我不希望桌子是永久更新以反映只有在顯示時才反映空間的情況。在使用select的其他世界中,它應該顯示'What Ever',但是在數據庫中它將保持'WhatEver'這可能嗎? – Thinker

+0

我沒有MSSQL 2012,所以我不能嘗試這個,但它是在文檔中。試試這個: select dbo.RegExReplace(col1,'([A-Z])','\ 1')其中col1 ='WhatEver' –

0

假設如果你正在使用Oracle RDBMS,您使用以下,

REGEX_REPLACE

SELECT REGEXP_REPLACE('ILikeToWatchCSIMiami', 
      '([A-Z.])', ' \1') 
      AS RX_REPLACE 
     FROM dual 
; 

設法得到這種輸出:* SQLFIDDLE

但是當你看到它不詞語,如CSI處理好,雖然。