Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Select despues de caracter con sql (https://www.clubdelphi.com/foros/showthread.php?t=78217)

ingmichel 29-03-2012 22:42:31

Select despues de caracter con sql
 
hola a todos como estan, espero que bien, necesito seleccionar datos de una columna despues de un caracter especifico en este caso la coma, por ejemplo dado los siguentes valores del campo nombre de mi tabla


CORONA TAVAREZ, RAQUEL EUNICE
PEREZ AGUILERA, ANA ERCILIA
QUEVEDO RAMIREZ, ESTEBAN

necesito seleccionar solo lo que esta despues de coma en este caso
RAQUEL EUNICE
ANA ERCILIA
ESTEBA

estoy utilizando sql server 2000, intenté utilizar la funcion substring pero no me sirve dado que los nombres varian en cuanto al largo de carateres.

gracias de antemano.

ecfisa 29-03-2012 22:51:53

Hola ingmichel.

Probá con la funcion [ CHARINDEX ]


Saludos.

iFoo 29-03-2012 23:59:37

Espero que te sirva
 
Prueba con esto.

function ParseSQL(textoE: String; delimitador: String): String;
var
fila: Integer;
index: Integer;
delta: Integer;
cadena: String;
textoS: String;
textoTMP: String;
begin
Result := EmptyStr;

fila := 0;
delta := Length(delimitador);
textoS := textoE + delimitador;

try
while Length(textoS) > 0 do
begin
index := Pos(delimitador, textoS);
cadena := Copy(textoS, 0, index - 1);
textoS := Copy(textoS, index + delta, MaxInt);

if (fila > 0) then
textoTMP := textoTMP + cadena + chr(13);

Inc(fila);
end;
finally
Result := textoTMP;
end;
end;

Para utlizar esta función, te doy un ejemplo, dentro de un boton colocas esto:

procedure TForm1.Button1Click(Sender: TObject);
var
textoE: String;
textoS: String;
begin
textoE:= 'CORONA TAVAREZ, RAQUEL EUNICE PEREZ AGUILERA, ANA ERCILIA QUEVEDO RAMIREZ, ESTEBAN';
textoS := ParseSQL(textoE, ',');

ShowMessage(textoS);
end;

ingmichel 30-03-2012 00:00:15

hola ecfisa
 
hola ecfisa gracias por responder, como utilizaria la funcion charindex ? ya que vi en la documentacion de sql que esta me devuelve un entero...

Cita:

Empezado por ecfisa (Mensaje 428811)
Hola ingmichel.

Probá con la funcion [ CHARINDEX ]


Saludos.


ingmichel 30-03-2012 00:06:10

Muchas Gracias
 
muchisimas gracias, he probado tu funcion y funciona muy bien, que dios te bendiga mi hermano y que viva delphi!!!

Cita:

Empezado por iFoo (Mensaje 428821)
Prueba con esto.

function ParseSQL(textoE: String; delimitador: String): String;
var
fila: Integer;
index: Integer;
delta: Integer;
cadena: String;
textoS: String;
textoTMP: String;
begin
Result := EmptyStr;

fila := 0;
delta := Length(delimitador);
textoS := textoE + delimitador;

try
while Length(textoS) > 0 do
begin
index := Pos(delimitador, textoS);
cadena := Copy(textoS, 0, index - 1);
textoS := Copy(textoS, index + delta, MaxInt);

if (fila > 0) then
textoTMP := textoTMP + cadena + chr(13);

Inc(fila);
end;
finally
Result := textoTMP;
end;
end;

Para utlizar esta función, te doy un ejemplo, dentro de un boton colocas esto:

procedure TForm1.Button1Click(Sender: TObject);
var
textoE: String;
textoS: String;
begin
textoE:= 'CORONA TAVAREZ, RAQUEL EUNICE PEREZ AGUILERA, ANA ERCILIA QUEVEDO RAMIREZ, ESTEBAN';
textoS := ParseSQL(textoE, ',');

ShowMessage(textoS);
end;


ecfisa 30-03-2012 00:20:41

Hola ingmichel.

No uso MS SQLServer, pero en esta página tenés una explicación más clara y un ejemplo.

Por lo que pude hace una tarea similar a la función Pos de Delphi.

Supongo que para tu caso debería ser algo parecido a:
Código SQL [-]
 SELECT SUBSTRING(CPO_NOMBRE, CHARINDEX(',' ,CPO_NOMBRE)+1, LENGTH(CPO_NOMBRE))
 FROM TU_TABLA
Pero me es imposible comprobarlo.

Saludos.

ingmichel 30-03-2012 00:55:42

gracias ecfisa he logrado hacerlo en mi sql 2000, pero ahora requiero hacer lo contrario, es decir seleccionar lo que esta antes de la coma, que funcion seria la indicada este caso ?


Cita:

Empezado por ecfisa (Mensaje 428828)
Hola ingmichel.

No uso MS SQLServer, pero en esta página tenés una explicación más clara y un ejemplo.

Por lo que pude hace una tarea similar a la función Pos de Delphi.

Supongo que para tu caso debería ser algo parecido a:
Código SQL [-]
 SELECT SUBSTRING(CPO_NOMBRE, CHARINDEX(',' ,CPO_NOMBRE)+1, LENGTH(CPO_NOMBRE))
 FROM TU_TABLA
Pero me es imposible comprobarlo.

Saludos.


ecfisa 30-03-2012 01:11:08

Cita:

Empezado por ingmichel (Mensaje 428834)
gracias ecfisa he logrado hacerlo en mi sql 2000, pero ahora requiero hacer lo contrario, es decir seleccionar lo que esta antes de la coma, que funcion seria la indicada este caso ?

Hola.

La misma.
Código SQL [-]
 SELECT SUBSTRING(CPO_NOMBRE, 1, CHARINDEX(',' ,CPO_NOMBRE))
 FROM TU_TABLA

Saludos.

ingmichel 30-03-2012 03:25:58

Funciono perfecto
 
Hola ecfisa acabo de probar y efectivamente me funciono muy bien, eres un master gracias por tu importantisima ayuda me ha servido de mucho.

bendiciones.

Cita:

Empezado por ecfisa (Mensaje 428841)
Hola.

La misma.
Código SQL [-]
 SELECT SUBSTRING(CPO_NOMBRE, 1, CHARINDEX(',' ,CPO_NOMBRE))
 FROM TU_TABLA

Saludos.



La franja horaria es GMT +2. Ahora son las 17:40:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi