Поэтому у меня есть строки в SQL, как этотИзвлечение кода из строки
Declare @Denumire varchar(2000) = '''Name''name(109)'',''name (1921)'',''name name name name name (2312)'',''name name name name name (2358)'''
То, что я хочу, чтобы получить каждый код для каждого имени.
Для этого примера было бы
109,1921,2312,2358
мне удалось получить последний код 2358 с помощью запроса.
Declare @Cod varchar(20)
Declare @test varchar(3000)
declare @CoduriFinale varchar(2000)
Declare @rDenumire varchar(3000) = REVERSE(@Denumire)
SELECT @Cod = LEFT(@rDenumire,CHARINDEX (' ' ,@rDenumire , 0))
SELECT @Cod = REPLACE (@Cod , '(' , '')
SELECT @Cod = REPLACE (@Cod , ')' , '')
set @CoduriFinale = REVERSE(RTRIM(LTRIM(SUBSTRING(@Cod,2,6))))+','
set @test = SUBSTRING(@rDenumire,CHARINDEX (',',@rDenumire, 0),LEN(@rDenumire))
set @rDenumire = @test
print @CoduriFinale
print @test
Так что я сделал здесь, реверс струна отверстие (это будет убедиться, что первое слово), пока ' '
не мой код, я не могу заставить его работать в цикле в то время как для этого для строки отверстия.
PS: моя строка на самом деле больше строк, разделенных запятой.
T-SQL является жестоким при манипулировании строкой, было бы проще передать данные клиенту, а затем использовать Regex для извлечения данных. Разумеется, было бы лучше сделать синтаксический анализ * до * хранения денормализованных данных в базе данных. Если вы беспокоитесь о таблицах со слишком большим количеством столбцов, вы можете использовать [разреженные столбцы] (http://msdn.microsoft.com/en-us/library/cc280604.aspx), чтобы хранить сотни столбцов с минимальным воздействием. –