我绝对建议在程序端而不是数据端进行字符串解析。话虽这么说,如果您绝对必须尝试做类似的事情:
DECLARE @String [nvarchar](256) = 'Name=Praveen | City=Hyderabad | Mobile=48629387429 | Role=User |'
DECLARE @name [nvarchar](256) = (SELECT SUBSTRING(@String, CHARINDEX('Name=', @String)+5, CHARINDEX('|', @String)))
DECLARE @city [nvarchar](256) = (SELECT SUBSTRING(@String, CHARINDEX('City=', @String)+5, CHARINDEX('|', @String)))
DECLARE @mobile [nvarchar](256) = (SELECT SUBSTRING(@String, CHARINDEX('Mobile=', @String)+7, CHARINDEX('|', @String)))
DECLARE @role [nvarchar](256) = (SELECT SUBSTRING(@String, CHARINDEX('Role=', @String)+5, CHARINDEX('|', @String)))
SELECT RTRIM(LTRIM(LEFT(@name, CHARINDEX('|', @name)-1))) AS Name,
RTRIM(LTRIM(LEFT(@city, CHARINDEX('|', @city)-1))) AS City,
RTRIM(LTRIM(LEFT(@mobile, CHARINDEX('|', @mobile)-1))) AS Mobile,
RTRIM(LTRIM(LEFT(@role, CHARINDEX('|', @role)-1))) AS Role
这将返回:
Name | City | Mobile | Role
________________________________________________
Praveen | Hyderabad | 48629387429 | User
请注意,CHARINDEX
在初始查询中添加的长度等于搜索字符串。
"Name=" 等于 5 个字符,所以我们加 5 以将索引移过 = 符号,"Mobile=" 等于 7,所以我们加 7。
同样,在最后的SELECT
查询中,我们从每个中减去 1CHARINDEX
以删除 | 象征。
资料来源:
子串
CHARINDEX
剩下
LTRIM
RTRIM