Skip to content
Advertisement

Select text from inside a string after a keyword

I have a column in SQL Server that has a string that looks like this. I’m trying to get the value of the “some_id” which in this case would ‘12345678911’. Any help on how I could get just that numerical value. I can’t seem to get it using the Substring() and Charindex() functions.

 """some_id""=>""12345678911"", ""someother_id""=>"""", ""somethingelse""=>""False"", 
 ""anotherString""=>""0""

-- trying to get 12345678911 without the quotes.

Any help would be much appreciated.

EDIT – Heres where my attempt is currently at, and I also did not want that 28 characters hard coded. It should stop at the first double quote.

  select TOP 100 SUBSTRING(col,CHARINDEX('some_id',col), 28) 
  From tableName

  -- RESULT
  -- some_id""=>""12345678911"

Advertisement

Answer

For your given example the following returns the required result. You just create a substring from your starting point and then find the next pair of double quotes, then substring between the starting point and the next pair of double quotes:

DECLARE @Col NVARCHAR(MAX) = '"""some_id""=>""12345678911"", ""someother_id""=>"""", ""somethingelse""=>""False"", 
 ""anotherString""=>""0""', @PatternToFind NVARCHAR(32) = 'some_id""=>""';

SELECT
  SUBSTRING(RemainingString, 1, CHARINDEX('""',RemainingString)-1)
FROM (
  SELECT
    SUBSTRING(Col,StartIndex+LEN(@PatternToFind),LEN(Col)) RemainingString
  FROM (
    SELECT CHARINDEX(@PatternToFind,@col) StartIndex
      , @Col Col -- Comment out this line and uncomment the next 2 to use a table
    --  , MyCol Col
    --FROM myTable
  ) A
) B

Which can be combined into a single statement, but you can see that duplicates code, so I find separating it out is clearer:

SELECT SUBSTRING(SUBSTRING(Col,CHARINDEX(@PatternToFind,col)+LEN(@PatternToFind),LEN(Col)), 1, CHARINDEX('""',SUBSTRING(Col,CHARINDEX(@PatternToFind,Col)+13,LENn(Col)))-1)
FROM (
  SELECT
    @Col Col -- Comment out this line and uncomment the next 2 to use a table
  --   , MyCol Col
  --FROM myTable
) A
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement