Если вы используете SQL Server 2016+, другой возможный способ разбить строку на подстроки и получить подстроку по позиции - это использовать OPENJSON () (это не слишком сложно, даже если вы незнаком с JSON
).
Сначала преобразуйте входной текст в действительный массив JSON
, используя REPLACE()
и STRING_ESCAPE()
(например, 'Visual studio'
в '["Visual", "Studio"]'
).После этого используйте OPENJSON()
со схемой по умолчанию, чтобы извлечь этот массив JSON
в виде таблицы, в которой есть столбцы key
, value
и type
.Столбец key
содержит индекс элемента в указанном массиве, поэтому вы можете получить каждый элемент по индексу.
Ввод:
CREATE TABLE #Data (
[Text] nvarchar(100)
)
INSERT INTO #Data
([Text])
VALUES
(N'Visu"al Studio'),
(N'Visual Studio'),
(N'Visual1 Studio'),
(N'Visual2 Studio'),
(N'Visual3 Studio'),
(N'Visual[ Studio')
T-SQL:
UPDATE #Data
SET [Text] = (
SELECT [value]
FROM OPENJSON(CONCAT(N'["', REPLACE(STRING_ESCAPE([Text], 'json'), N' ', N'","'), '"]'))
WHERE [key] = 0
-- or get other substring by index: WHERE [key] = 1
)
Выход:
SELECT [Text]
FROM #Data
-------
Text
-------
Visu"al
Visual
Visual1
Visual2
Visual3
Visual[