Dividir una cadena en dos partes y seleccionar en dos variables

Estoy usando SQL Server 2005. Tengo una cadena con un carácter especial : como:

 XYZ:xyz@mail.com 

Quiero dividir esta cadena en dos cadenas secundarias y seleccionar en variables. El personaje especial : es solo un separador.

 @variable1=XYZ @variable2=xyz@mail.com 

Por favor, guíame sobre cómo es posible.

Guía de split de cadenas:

  1. Use CHARINDEX para encontrar la position de :

  2. Use SUBSTRING para tomar todos los caracteres antes de la position de : y SUBSTRING en @variable1 .

  3. Use SUBSTRING para tomar todos los caracteres después de la position de : y guárdelos en @variable2 .

Una posible implementación:

 DECLARE @string varchar(max), @variable1 varchar(max), @variable2 varchar(max); SET @string = 'XYZ:xyz@mail.com'; SELECT @variable1 = SUBSTRING(S, 1, P - 1), @variable2 = SUBSTRING(S, P + 1, L - P) FROM ( SELECT S = @string, P = CHARINDEX(':', @string), L = LEN(@string) ) s; SELECT @variable1, @variable2; 

Salida:

 -------------------- -------------------- XYZ xyz@mail.com 

Si ':' falta, @ v1 será nulo

 DECLARE @v1 varchar(20) DECLARE @v2 varchar(20) DECLARE @s varchar(20) SET @s = 'XYZ:xyz@mail.com' SELECT @v1 = stuff(b, len(b),1,''), @v2 = stuff(@s, 1, len(b),'') FROM (SELECT left(@s, charindex(':', @s)) b) a SELECT @v1 v1,@v2 v2 

Resultado:

 v1 v2 --- ------------ XYZ xyz@mail.com 
 DECLARE @var VARCHAR(100) SET @var='XYZ:xyz@mail.com' SELECT SUBSTRING(@var, 1, CHARINDEX(':',@var)-1) as var1 -- get part till : ,SUBSTRING(@var, CHARINDEX(':',@var)+1, LEN(@var)) AS var2 -- get part after : 

Explicado:

substring get es una parte de una cadena de inicio_position a fin_position

SUBSTRING (string, start_position, end_position)

charindex get's la position de un personaje dentro de una string

CHARINDEX (character_to_search, string_to_search_in)

http://msdn.microsoft.com/en-us/library/ms187748.aspx

http://msdn.microsoft.com/en-us/library/ms186323.aspx