2016-12-02 45 views
0

一些意見後,我現在有存儲稱爲nvarchar的領域SQL response_string內的一串數據,我只想脫身<tag></tag>
例如之間的寫法<tag>test</tag>這將返回testSQL字符串分割

我目前使用下面的代碼,但它似乎對我來說過於複雜,我想知道是否有更好的寫作方式。

(case when charindex('</tag>',[response_String])>charindex('<tag>',[response_String]) 
then substring([response_String],charindex('<tag>',[response_String])+(11),(charindex('</tag>',[response_String])-charindex('<tag>',[response_String]))-(11)) end) 

不幸的是,由於我不得不使用此代碼的方式,我無法使用函數。

+1

提供樣品字符串 –

+0

約翰嗨,我的例子中沒有包含原來的一個例子,但似乎已提取的字符串將是'測試' – PJD

+0

是一個XML? –

回答

0
select try_cast('<tag>test</tag>' as xml).value('/tag[1]','nvarchar(100)') 
+0

如果字符串不是格式良好的xml,那麼會不會拋出錯誤? –

+0

@ZoharPeled,現在(編輯),它不會 –

+0

我試過這條路線走下去之前,但由於格式錯誤的XML有時我用了2次多失誤結束了,另一個選擇是正確的XML格式但這似乎又增加了更多的複雜性。 – PJD

0

您可以更改與標籤此列如下出現的選擇查詢。如果缺失,它不會引發錯誤。

select replace(replace(column_name , "<tag>",""), "</tag>","") from table_name

如果有2-3個最大的節點,可以如上使用,但如果不是考慮數據的方式很多存儲.. 3-4套更換可能使查詢有點尷尬的,對付以期可以創建..

+0

嗨吉里什,我看着你的建議,它工作得很好,直到它發現有時標籤支架被包裹在''我沒有擺在首位期待進一步的節點,我在想,在那裏可能是一個額外的節點,可能會有更多的前進。 – PJD

+0

嗨 - 我已經更新了我的意見在答案..however處理它們在數據庫中,將比在Java中處理它們快得多.. – Girish