注意如何僅指@search一次@syncData兩次,最少使用的功能來優化性能。
查找varchar中的子字符串。
DECLARE @search nvarchar(2000)= 'SiteCode'
DECLARE @syncData nvarchar(4000)='MyCol1="ABC" MyCol2="DEF" SiteCode="LA123"'
SET @search += '="'
SELECT SUBSTRING(x.x, 0, CHARINDEX('"', x.x))
FROM
(SELECT RIGHT(@syncData,
NULLIF(CHARINDEX(REVERSE(@search), REVERSE(@syncData)), 0) - 1) x) x
要在表中查找的字符串:
DECLARE @search nvarchar(2000)= 'MyCol2'
SET @search += '="'
DECLARE @t table(syncData nvarchar(4000))
INSERT @t values
('MyCol1="ABC" MyCol2="DEF" SiteCode="LA123"'),
('MyCol1="ABD" MyCol2="DEG" SiteCode="LA321"')
SELECT SUBSTRING(x.x, 0, CHARINDEX('"', x.x))
FROM @t t
CROSS APPLY
(SELECT RIGHT(syncData,
NULLIF(CHARINDEX(REVERSE(@search), REVERSE(syncData)), 0) - 1) x) x
SUBSTRING與CHARINDEX聽起來像一個可行的解決方案。請詳細說明你的嘗試以及你期待的結果。 –
您可以嘗試正確的()函數... MSDN是[這裏](https://msdn.microsoft.com/en-IN/library/ms177532.aspx) –
聞起來像不好的設計給我。不同的數據應該存儲在不同的列中。 –