'How to do conditioned substring in SQL Server

I have a table [dbo].[LogActionItems] which looks like:

ItemParam
 Jméno = [Výber_s_orezem3], Název pole "Od" = [OD], Název pole "Do" = [DO], Interval "Od" = [1.10.2016], Interval "Do" = [31.10.2016], Orezat = [True], Podmínka = [OSCIS='26767'], Vstupní tabulka = [CELPRAC], Výstupní tabulka = [tmp_CELPRAC_pomoc],

I want to extract the string behind "Jmeno =" without the "[]". So the expected output would be value "Vyber_s_orezem3".



Solution 1:[1]

Please try the following solution.

It will work starting from SQL Server 2017 onwards.

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE  (ID INT IDENTITY PRIMARY KEY, ItemParam NVARCHAR(MAX));
INSERT INTO @tbl (ItemParam) VALUES
(N'Jméno = [Výber_s_orezem3], Název pole "Od" = [OD], Název pole "Do" = [DO], Interval "Od" = [1.10.2016], Interval "Do" = [31.10.2016], Orezat = [True], Podmínka = [OSCIS=''26767''], Vstupní tabulka = [CELPRAC], Výstupní tabulka = [tmp_CELPRAC_pomoc],');
-- DDL and sample data population, end

SELECT ID, value
    , Result = TRIM(' []' FROM RIGHT(value, LEN(value) - pos))
FROM @tbl
CROSS APPLY STRING_SPLIT(ItemParam, ',')
CROSS APPLY (SELECT CHARINDEX('=', value)) AS t(pos)
WHERE value LIKE N'Jméno%';

Output

+----+---------------------------+-----------------+
| ID |           value           |     Result      |
+----+---------------------------+-----------------+
|  1 | Jméno = [Výber_s_orezem3] | Výber_s_orezem3 |
+----+---------------------------+-----------------+

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Yitzhak Khabinsky