我有一个表名测试(id,params) 其中有值(1,$ ch = 20 $ ph = 9875567 $ ng = hutdj)
我想只取Ph值,这意味着输出应为9875567
答案 0 :(得分:0)
你可以这样做:
DECLARE @searchString NVARCHAR(50) = '$ch=20$ph=9875567$ng=hutdj'
DECLARE @startFrom INT= CHARINDEX('ph=',@searchstring) + 3
DECLARE @length INT = CHARINDEX('$ng',@searchstring) - @startFrom
SELECT SUBSTRING(@searchstring,@startFrom, @length) AS RESULT
演示 SQL Fiddle
内联版本:
DECLARE @searchString NVARCHAR(50) = '$ch=20$ph=9875567$ng=hutdj'
SELECT SUBSTRING(@searchstring,
CHARINDEX('ph=',@searchstring) + 3,
CHARINDEX('$ng',@searchstring) - CHARINDEX('ph=',@searchstring) - 3) AS RESULT
演示 SQL Fiddle
答案 1 :(得分:0)
使用XML
select *, params_xml.value('(/x[@n="ph"]/text())[1]', 'varchar(100)')
from (
select *, cast(stuff(replace(replace(params,'=', '">'), '$', '</x><x n="'), 1, 4, '') + '</x>' as xml) as params_xml
from test
) t
答案 2 :(得分:0)
试试这个...... 第一个子字符串将返回$ ph =后的所有字符,第二个子字符串将返回结果字符串中的所有字符到下一个$
SET @params = SUBSTRING(
SUBSTRING(@s, PATINDEX('%$ph%',@s) + 4 ,
LEN(@S)- PATINDEX('%$ph%',@s)-3),
0,
PATINDEX('%$%', SUBSTRING(@s, PATINDEX('%$ph%',@s) + 4 ,
LEN(@S)- PATINDEX('%$ph%',@s)-3)))