split a campo

09/09/2004 - 01:00 por Cesar Correa | Informe spam
Buenas tardes amigo,
Resulta que estoy comparando un campoA con un campoB,
y pues el campoB tiene valores separados por guiones.
entonces el operador Like solo me esta comparando el
primer valor antecedido del guion "-" pero los valores
seguidos del guion quedan ignorados!

entonces ¿habrá una funcion de cadena que me permita
partir o hacer split a esa cadena de campoB???

me hago entender? ;-)

muchas gracias por tu colaboracion!

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera [MVP]
09/09/2004 - 03:03 | Informe spam
Puedes brindarnos un ejemplo y cómo estás intentando hacerlo?

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Cesar Correa" wrote in message
news:87d201c495f7$928d6fe0$
Buenas tardes amigo,
Resulta que estoy comparando un campoA con un campoB,
y pues el campoB tiene valores separados por guiones.
entonces el operador Like solo me esta comparando el
primer valor antecedido del guion "-" pero los valores
seguidos del guion quedan ignorados!

entonces ¿habrá una funcion de cadena que me permita
partir o hacer split a esa cadena de campoB???

me hago entender? ;-)

muchas gracias por tu colaboracion!
Respuesta Responder a este mensaje
#2 cesar Correa
10/09/2004 - 20:58 | Informe spam
Hola Gustavo, mira te cuento que la consulta que tengo en
resumido es algo asi:
"select t1.campoa, t1.campo.. FROM tabla1 t1
inner join tabla2 t2 on t2.campoB like t1.campoA"

el campo t1.campoA tiene valores asi:
3001
3102
3023
3034

el campo t2.campoB tiene valores asi:

2017-3001-345
3102
4001-3023-3034
3120
3121
3122-3123-3620


me hago entender? necesito hacer "split" en transact SQL?
no lo se!


gracias amigo!
Respuesta Responder a este mensaje
#3 Gustavo Larriera [MVP]
11/09/2004 - 08:47 | Informe spam
Creo que la función PATINDEX puede ayudarte en lo que deseas hacer. La misma
permite detectar un string adentro de otro string. Puedes aprender los
detalles en los Books Online (BOL) de tu instalación SQL.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"cesar Correa" wrote in message
news:01bd01c49768$34dd0730$

Hola Gustavo, mira te cuento que la consulta que tengo en
resumido es algo asi:
"select t1.campoa, t1.campo.. FROM tabla1 t1
inner join tabla2 t2 on t2.campoB like t1.campoA"

el campo t1.campoA tiene valores asi:
3001
3102
3023
3034

el campo t2.campoB tiene valores asi:

2017-3001-345
3102
4001-3023-3034
3120
3121
3122-3123-3620


me hago entender? necesito hacer "split" en transact SQL?
no lo se!


gracias amigo!
Respuesta Responder a este mensaje
#4 fergek
11/09/2004 - 14:49 | Informe spam
"Cesar Correa" wrote in message news:<87d201c495f7$928d6fe0$...
Buenas tardes amigo,
Resulta que estoy comparando un campoA con un campoB,
y pues el campoB tiene valores separados por guiones.
entonces el operador Like solo me esta comparando el
primer valor antecedido del guion "-" pero los valores
seguidos del guion quedan ignorados!

entonces habr una funcion de cadena que me permita
partir o hacer split a esa cadena de campoB???

me hago entender? ;-)

muchas gracias por tu colaboracion!



En algun caso, necesite hacer lo mismo. Para resolverlo use una USER
DEFINED FUNCTION, de la cual, te mando el SCRIPT a continuacion.


alter FUNCTION fcnSplit
(
@msg varchar(50),
@sep char(1)
)
RETURNS @table_return TABLE
(
words varchar(50)
)

AS
BEGIN

declare @fin int

set @msg = ltrim(rtrim(@msg))
while (replace(@msg, replicate(@sep, 2), @sep)<>@msg)
set @msg = replace(@msg, replicate(@sep, 2), @sep)

if charindex(@sep, @msg) = 0
begin
insert into @table_return values(@msg)
end

else
begin

while @msg <> ''
begin
set @fin = 1
while substring(@msg, @fin, 1)<>@sep and @fin < len(@msg)
begin
set @fin=@fin+1
end
insert into @table_return values( replace( substring(@msg, 1,
@fin) , @sep, '') )
set @msg = ltrim (rtrim ( replace (@msg, substring(@msg, 1, @fin),
'') ))
end
end

RETURN

END
GO



Basicamente, lo que hace es recibir un string con valores y un
separador.
Luego, te devuelve los distintos valores que habia en el string, en
forma de tabla.

Espero que sirva.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida