Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como comparar un registro contra una cadena (https://www.clubdelphi.com/foros/showthread.php?t=56389)

egostar 15-05-2008 20:58:21

Como comparar un registro contra una cadena
 
Hola

Primero que nada, no encontré un título adecuado a mi problemática, "perdone vuestra merced" :o

Estoy creando un módulo para asignación de números telefónicos oficiales, que quiero decir con esto, bueno, en las empresas se generan llamadas de las cuales muchas de ellas son números de clientes, proveedores o cualquier número relacionado con las actividades de la empresa.

Bueno, la cuestión es que estoy almacenando dichos números que me servirán a la hora de recibir a través de la comunicación serial con un sistema telefónico el registro detallado de la llamadas, pero....., como siempre hay un pero, algunas veces los números que recibo traen digitos adicionales porque ya sea que son contestados por operadoras automatizadas y requieren de marcar digitos extras por tanto no puedo comparar olimpicamente esos números con los almacenados en la base de datos.

Por ejemplo

el número que tengo registrado en mi base es
01551234567
Pero el usuario marca
01551234567111235

Es obvio que no puedo comparar de esta forma

Código SQL [-]
Select * from tabla
where numero = '01551234567111235'

Ni tampoco puedo hacer esto

Código SQL [-]
Select * from tabla
where numero like '01551234567111235%'

Actualmente lo que hago es ir quitando (en un bucle) digitos de la derecha del número que se recibe hasta que coincide el número con la base de datos, pero me pregunto; habrá alguna opción que me permitiera preguntar si un numero de la base de datos está contenido en el número que estoy recibiendo :confused:

Espero haberme explicado correctamente :(

Salud OS

hecospina 15-05-2008 22:36:10

Egostar
Yo utilizo firebird 2.0 y me funciona esto

Código SQL [-]
Select * from tabla where numero containing '01551234567111235'

egostar 15-05-2008 22:49:30

Gracias por responder hescopina

Ya lo he probado y no encuentra la coincidencia, mas bien lo que necesito es lo contrario, ya estoy pensando que no se va a poder :(

Salud OS

roman 15-05-2008 22:56:55

¿Qué no se puede algo así?

Código SQL [-]
where substring('01551234567111235', 1, legth(numero)) = numero

// Saludos

mamcx 15-05-2008 23:03:34

Y con el LIKE:

Cita:

Campo Like '%loquesea%'

egostar 15-05-2008 23:23:02

Les explico mas lo que necesito,

En la base de datos tengo esto

12345678

pero tengo una variable con esto

1234567811111

si hago lo que sugieren seria algo asi

Código SQL [-]
SELECT * FROM TABLA WHERE '12345678' LIKE '%1234567811111%'

No me da resultados

Código SQL [-]
where substring('01551234567111235', 1, legth(numero)) = numero

En este caso desconozco la longitud del número, puede ser desde 8 hasta 13, aunque me parece que puedo ir jugando con algunos valores :)

Creo que ya los estoy confundiendo mas, voy a intentar y les comento los resultados. Gracias a todos

Salud OS

roman 15-05-2008 23:31:25

Cita:

Empezado por egostar (Mensaje 287029)
En este caso desconozco la longitud del número

¿Y quién habla de que debas conocerla? En el ejemplo supongo que numero es el nombre del campo y que tienes una función length, porque la tienes ¿no?

// Saludos

egostar 15-05-2008 23:35:01

Cita:

Empezado por roman (Mensaje 287034)
¿Y quién habla de que debas conocerla? En el ejemplo supongo que numero es el nombre del campo y que tienes una función length, porque la tienes ¿no?

// Saludos

He probado esa consulta y me regresa esto

Cita:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, column 45.
,.
Código SQL [-]
SELECT * FROM OFICIALES
WHERE substring('01551234567111235', 1, legth(numero)) = numero

Lo intente tambien así

Código SQL [-]
WHERE substring("01551234567111235", 1, legth(numero)) = numero

Incluso así

Código SQL [-]
WHERE numero = substring('01551234567111235', 1, legth(numero))

y en todas me da ese error :(

Salud OS

Edito: USo Firebird 2.0 y el campo es de tipo varchar(20)

roman 15-05-2008 23:37:12

Yo la acabo de probar en MySQL y funciona bien. Fíjate que en mi ejemplo cometí el error de escribir legth en lugar de length, y al parecer así lo tienes también. Chécale eso.

// Saludos

egostar 16-05-2008 01:22:57

Hola,

Gracias por toda la ayuda que me han dado ya que me han dado la pauta para encontrar la solución a mi problema, esta es la forma como Firebird acepta el substring.

Código SQL [-]
select * from OFICIALES
where numero = substring('01551234567111235' FROM 1 FOR strlen(numero))

Esto me ha regresado lo que necesitaba :)

Código:

NUMERO          EXTENSION        DESCRIPCION
01551234567        1234                Oficina Regional XYZ

Muchas gracias a todos

Salud OS


La franja horaria es GMT +2. Ahora son las 17:14:29.

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