Sie können charindex und substring verwenden. Zum Beispiel für den Wert von „baz“ suchen:
declare @str varchar(128)
set @str = 'foo=abc;bar=def;baz=ghi'
-- Make sure @str starts and ends with a ;
set @str = ';' + @str + ';'
select substring(@str,
charindex(';baz=',@str) + len(';baz='),
charindex('=',@str,charindex(';baz=',@str)) - charindex(';baz=',@str) - 1)
Oder für den Wert von „foo“ zu Beginn der Zeichenfolge:
select substring(@str,
charindex(';foo=',@str) + len(';foo='),
charindex('=',@str,charindex(';foo=',@str)) - charindex(';foo=',@str) - 1)
Hier ist ein UDF dies zu erreichen (mehr lesbare Version von BlackTigerX Antwort inspiriert):
create function dbo.FindValueInString(
@search varchar(256),
@name varchar(30))
returns varchar(30)
as
begin
declare @name_start int
declare @name_length int
declare @value_start int
declare @value_end int
set @search = ';' + @search
set @name_start = charindex(';' + @name + '=',@search)
if @name_start = 0
return NULL
set @name_length = len(';' + @name + '=')
set @value_start = @name_start + @name_length
set @value_end = charindex(';', @search, @value_start)
return substring(@search, @value_start, @value_end - @value_start)
end
Wie Sie sehen können, dies in SQL Server :) Besser tut dies in der Client-Sprache ist nicht einfach, oder Ihre Datenbank normalisieren, so dass der Teil in ihren eigenen Spalten gehen .
ist die Zeichenkette ein Zeilenwert oder etwas übergeben? – Josh
Haben Sie im db-Schema etwas zu sagen? Solche Werte zu speichern geht dagegen, wie SQL-Datenbanken funktionieren sollen. –
Ich stimme zu. Ich hätte es nicht so entworfen, aber ich muss mit dem vorhandenen Code arbeiten. –