2015-09-01 3 views
0

У меня есть строка, как how are you 'xyz', bye.Нужно получить строку, которая находится в одинарных кавычках

Здесь мне нужно вынуть только xyz, который находится в одинарных кавычках в приведенной выше строке. Я могу использовать SQL-запрос или хранимую процедуру.

+1

Что вы пробовали? Всегда ли одна точка подстроки в одинарных кавычках? – Shnugo

ответ

0

Попробуйте регулярные выражения (regex). Это будет работать: \'xyz\'. Или использовать это для любого # символов: \'.*\'

1

Я думаю, что вы ищете для этого

declare @x varchar(50)= 'how are you ''xyz'', bye' 
select substring(left(@x,charindex(',',@X)-2),charindex('''',@x)+1,len(@x)) 
0

у меня в базе данных для этой специальной функции:

CREATE FUNCTION ufn_GetTextFromQuotes (@text nvarchar(max), @IsDoubleQuotes bit = 0) 
RETURNS nvarchar(max) 
AS 
BEGIN 
    declare @Pos int, @EndPos int, @string nvarchar(max), @Quotes nvarchar(max) 

    IF @IsDoubleQuotes = 1 
    SET @Quotes = '"' 
    ELSE 
    SET @Quotes = '''' 

    SET @string = '' 
    SET @Pos = CHARINDEX(@Quotes, @text, 0) 

    WHILE @Pos != 0 
    BEGIN 
     SET @EndPos = CHARINDEX(@Quotes, @text, @Pos + 1) 
     IF @string != '' 
     SET @string = @string + ',' 
     SET @string = @string +SUBSTRING(@text, @Pos + 1 , @EndPos - @Pos - 1) 

     SET @Pos = CHARINDEX(@Quotes, @text, @EndPos + 1) 
    END 
    RETURN @string 
END 

и использования:

select dbo.ufn_GetTextFromqQuotes('how are you ''xyz'', bye', default) as result 
+0

Ничего себе, это сложный способ добраться туда. Выполнение этого будет очень болезненным для многих наборов данных. –

+0

Да, я согласен с тобой. Но уже давно кто-то создал, и мы все еще используем его (( – Marusyk

+0

Просто потому, что он существует уже давно, это не значит, что это хорошо. Это было бы так просто переписать в встроенную функцию, ориентированную на таблицу. это было бы проще, это было бы быстрее. –

Смежные вопросы