从字符串中获取特定值

Get a particular value from String

我想从我的字符串中删除特定值。我的字符串可以是任意长度。例如

字符串 1:

{"ABC":1,"ABC_DT":-1,"ABC_DBQty":0,"ABC_DSQty":0,"ABC_LMT":1,"ABC_DT":-1,"CTSD":"TEST","SD":1,"TE":23}

字符串 2:

{"ABC":1,"ABC_DT":-1,"ABC_DBQty":0,"ABC_DSQty":0,"ABC_LMT":1,"ABC_DT":-1,"CTSD":"TEST","TE":23}

结果我想要这个23。我怎样才能在 SQL Server 2014 中得到这个?

使用JSON_VALUE函数:

https://docs.microsoft.com/en-us/sql/t-sql/functions/json-value-transact-sql?view=sql-server-2017&viewFallbackFrom=sql-server-2014

(不幸的是自 2016 年以来可用)

解决方案:

DECLARE @str VARCHAR(MAX) = '{"ABC":1,"ABC_DT":-1,"ABC_DBQty":0,"ABC_DSQty":0,"ABC_LMT":1,"ABC_DT":-1,"CTSD":"TEST","TE":23}'
,@posA INT = 0
,@posB INT = 0
,@res VARCHAR(MAX) = ''

SET @posA = PATINDEX('%"TE":%}', @str) +5; 
SET @posB = CHARINDEX('}', @str, @posA+1);  

SET @res = SUBSTRING (@str ,@posA, @posB-@posA )  

SELECT @res AS 'STR_res', CAST(@res AS INT) AS 'INT_res'
DECLARE @string VARCHAR(500) = '{"ABC":1,"ABC_DT":-1,"ABC_DBQty":0,"ABC_DSQty":0,"ABC_LMT":1,"ABC_DT":-1,"CTSD":"TEST","TE":23}'
SET @string = REVERSE(@string)

SELECT REVERSE(
                SUBSTRING(@string,2,CHARINDEX(':',@string)-1-1)
              )  --return: 23