Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Eliminar zeros (https://www.clubdelphi.com/foros/showthread.php?t=72808)

kambiz 12-03-2011 19:49:59

Eliminar zeros
 
Buenas,
Existe alguna función que elimine los ceros a la izquierda en un string. 'Replace' no me vale.
Por ejemplo:
Registro 1: Referencia = '000134-580'
Registro 2: Referencia = '134-580'
Registro 3: Referencia = '00134-580'

Lo que quiero es que con el siguiente select (uso un TAdoQuery):
Select * from tabla where Referencia = '134-580
me devuelva los tres registros

Muchas gracias

Casimiro Noteví 12-03-2011 20:32:52

Código SQL [-]
select * from tabla where Referencia like '%134-580%'

kambiz 12-03-2011 20:56:05

Gracias pero no me sirve, por dos motivos:
- el programa es muy complejo y no me atrevo a cambiar la instrucción sql, por lo que no me sirve poner la condición en el where.
- porqué '%134-580%' no hace lo que yo quiero.
Por ejemplo:
Registro 1: Referencia = '000134-580'
Registro 2: Referencia = '134-580'
Registro 3: Referencia = '00134-580'
Registre 4: Referencia = '134-580 abc'

Me devolvería los 4 registros y el cuarto no cumple con la condición

Casimiro Noteví 12-03-2011 21:37:44

Pues cuéntanos todos los casos posibles que valen o no valen, no somos adivinos ;)

kambiz 12-03-2011 21:51:50

Casimiro, mi primer post pone exactamente que quiero, una función para eliminar los ceros de la izquierda en un string, es decir, quiero que:
'000134-58'
'0000000134-58'
'00134-58'
....

Tengo un query con 1000 registros, y quiero filtrar aquellos registros cuyo campo referencia sea '134-58'.

Los tres ejemplos anteriores entrarían dentro del filtro, este, por ejemplo no, '000134-58 abc'

Mejor no lo puedo explicar
Gracias

Casimiro Noteví 13-03-2011 00:04:01

¿Y lo quieres hacer desde delphi o en sql?

kambiz 13-03-2011 00:26:00

Suponiendo que el campo Referencia fuese numérico, o que sólo admitiera números, la instrucción sería la siguiente:

Select Referencia From Table Where CDbl(Referencia) = '134-580'

Pero como el campo Referencia contiene carácteres alfanuméricos, no puedo usar la instrucción CDbl

Gracias.

Casimiro Noteví 13-03-2011 00:41:20

¿No te vale un procedimiento almacenado?, ¿qué base de datos usas?

kambiz 13-03-2011 01:58:54

Casimiro, no es que no me valga. Lo que sucede es que este programa está funcionando, es complejo, la persona que lo escribió se fue y no me atrevo a tocar tanto código. Por eso prefiero hacer un filtro y después lo elimino.
Te seré sincera, creo que esto que quiero no es posible

Casimiro Noteví 13-03-2011 09:51:08

No has dicho qué base de datos usas, tampoco si esa sentencia se lanza desde delphi o está en la propia base de datos.
Si nos informaras exactamente de todo lo que te he preguntado hasta ahora sería posible ayudarte, aunque sea complejo :)

kambiz 13-03-2011 10:23:40

Casimiro, en mi primer post digo:
Lo que quiero es que con el siguiente select (uso un TAdoQuery), o sea,
en Delphi, tengo un TAdoQuery con las siguientes propiedades:
TAdoQuery1.Sql -> "Select * from Tabla"
TAdoQuery1.Filter -> Funcion(Referencia) = '134-580'

donde funcion sería la que me gustaría saber si existe, una que elimine los ceros de la izquierda en un string.

La base de datos que uso es Access



Casimiro Noteví 13-03-2011 10:38:58

Aunque no exista una función que quite los ceros, puedes hacerlo tú, por ejemplo, algo simple como esto te puede valer:
Código Delphi [-]
function QuitarCerosIzquierda(cReferencia:string):string;
begin
  result := cReferencia;
  while result[1]='0' do
    result := copy(Result,2,length(Result));
end;


Y para usarlo:
Código Delphi [-]
TAdoQuery1.Sql -> "Select * from Tabla"[/i]
TAdoQuery1.Filter -> QuitarCerosIzquierda(Referencia) = '134-580'


No sé cómo funciona el filtro del adoquery, pero también puedes hacer algo así como:
Código:


TAdoQuery1.Sql -> "Select * from Tabla"
;
Referencia := QuitarCerosIzquierda(Referencia);

TAdoQuery1.Filter -> (Referencia) = '134-580'


kambiz 13-03-2011 10:56:34

Buenas de nuevo Casimiro, jamás he utilizado una función en un filtro, pero si lo mencionas será porqué es posible.
Lo he probado y de momento me da error. Por la tarde insistiré y informaré del resultado.
Gracias

Al González 13-03-2011 16:36:32

Hola kambiz.

Cita:

Empezado por Casimiro Notevi (Mensaje 393360)
Código SQL [-]
select * from tabla where Referencia like '%134-580%'

Tomando la primera sugerencia de Casimiro (y suponiendo que no haya problema para lanzar una sentencia SQL desde Delphi), sólo hay que quitar el segúndo "%":
Código SQL [-]
Select * From Tabla Where Referencia Like '%134-580'
Dices que no te atreves a cambiar la instrucción SQL, pero es eso mismo lo que sugieres con tu primer mensaje, por lo que se genera algo de confusión.

Sobre la última sugerencia del propio Casimiro, dices que te aparece un error, pero no mencionas cuál ni en qué instrucción (algo que es elemental cuando se hacen consultas en un foro).

Donde estoy es por la mañana, donde está Casi es de tarde, alguien estará leyendo esto desde algún lugar de Asia donde ahora mismo es de noche, ¿tú dónde estás? ;)

Toma en cuenta que no siempre es fácil interpretar lo que algún compañero pregunta, aunque para él esté muy claro. Y nunca está de más la cortesía de un "bueno, mira, quizá no me expliqué bien, te pongo un ejemplo..." (eso de "mi primer post pone exactamente que quiero" fue un poco grosero).

Aquí estamos todos para ayudarnos; ayúdanos a ayudarte. :)

Al González.

kambiz 13-03-2011 18:26:31

Tal como dices, Al González, en todos los post estoy dando las gracias, con lo que si algunas palabras mías te puedan resultar groseras, no deja de ser tu interpretación.
Además, si estoy preguntando y alguien me contesta desinteresadamente, sería absurdo por mi parte contestarle mal o con algún tipo de exigencia.
No entiendo porqué me echas la bronca

Al González 13-03-2011 19:52:55

Descuida, no hay bronca tal. :)

Casimiro Noteví 13-03-2011 21:13:55

Pienso que el principal problema es de desconocimiento, que no conoce el programa y no se atreve a tocar nada, pero el problema es que así no es fácil ayudar.


La franja horaria es GMT +2. Ahora son las 16:23:08.

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