如何基于字符串在SQL中的列中拆分值

时间:2014-03-21 15:35:37

标签: sql sql-server sql-server-2008

我有一个表名测试(id,params) 其中有值(1,$ ch = 20 $ ph = 9875567 $ ng = hutdj)

我想只取Ph值,这意味着输出应为9875567

3 个答案:

答案 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)))