PDA

Ver la Versión Completa : Como comparar un registro contra una cadena


egostar
15-05-2008, 20:58:21
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


Select * from tabla
where numero = '01551234567111235'


Ni tampoco puedo hacer esto


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


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í?


where substring('01551234567111235', 1, legth(numero)) = numero


// Saludos

mamcx
15-05-2008, 23:03:34
Y con el LIKE:

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

SELECT * FROM TABLA WHERE '12345678' LIKE '%1234567811111%'

No me da resultados

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
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
¿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


Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, column 45.
,.


SELECT * FROM OFICIALES
WHERE substring('01551234567111235', 1, legth(numero)) = numero

Lo intente tambien así

WHERE substring("01551234567111235", 1, legth(numero)) = numero

Incluso así

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.


select * from OFICIALES
where numero = substring('01551234567111235' FROM 1 FOR strlen(numero))


Esto me ha regresado lo que necesitaba :)


NUMERO EXTENSION DESCRIPCION
01551234567 1234 Oficina Regional XYZ


Muchas gracias a todos

Salud OS