Вы можете написать такую функцию, которая будет обрабатывать все случаи - есть двоеточие (:
) и / или точка с запятой (;
) - или вообще нет. В любом случае это вернет искомый фрагмент строки:
ALTER FUNCTION dbo.ExtractString (@InputString VARCHAR(500))
RETURNS VARCHAR(500)
AS BEGIN
DECLARE @Result VARCHAR(500)
DECLARE @ColonPos INT, @SemicolonPos INT
SET @ColonPos = CHARINDEX(':', @InputString)
SET @SemicolonPos = CHARINDEX(';', @InputString)
IF @ColonPos > 0
IF @SemicolonPos > 0
SET @Result = SUBSTRING(@InputString, @ColonPos + 1, @SemicolonPos - 1 - @ColonPos)
ELSE
SET @Result = SUBSTRING(@InputString, @ColonPos + 1, 500)
ELSE
IF @SemicolonPos > 0
SET @Result = SUBSTRING(@InputString, 1, @SemicolonPos - 1)
ELSE
SET @Result = @InputString
RETURN @Result
END
Поскольку это всего лишь функция манипуляции со строками, она также не должна быть слишком плохой с точки зрения производительности.
Если вы запускаете его для разных входов:
SELECT
dbo.ExtractString('asp:test;abca'),
dbo.ExtractString('asps:tesst;abcsa'),
dbo.ExtractString('asssp:tsest;assbca'),
dbo.ExtractString('test'),
dbo.ExtractString('a:test'),
dbo.ExtractString('atest;something')
вы получите эти результаты:
test tesst tsest test test atest