注意如何仅指@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) –
闻起来像不好的设计给我。不同的数据应该存储在不同的列中。 –