Получить конкретное значение из строки - PullRequest
0 голосов
/ 11 октября 2018

Я хочу удалить определенное значение из моей строки.Моя строка может быть любой длины.Например,

строка 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?

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

РЕШЕНИЕ:

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'
0 голосов
/ 11 октября 2018
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
0 голосов
/ 11 октября 2018

используйте функцию 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 года)

...