Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-05-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Como comparar un registro contra una cadena

Hola

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

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

Espero haberme explicado correctamente

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #2  
Antiguo 15-05-2008
hecospina hecospina is offline
Miembro
 
Registrado: oct 2007
Posts: 202
Poder: 19
hecospina Va por buen camino
Egostar
Yo utilizo firebird 2.0 y me funciona esto

Código SQL [-]
Select * from tabla where numero containing '01551234567111235'
Responder Con Cita
  #3  
Antiguo 15-05-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
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
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #4  
Antiguo 15-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Qué no se puede algo así?

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

// Saludos
Responder Con Cita
  #5  
Antiguo 15-05-2008
Avatar de mamcx
mamcx mamcx is online now
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Y con el LIKE:

Cita:
Campo Like '%loquesea%'
__________________
El malabarista.
Responder Con Cita
  #6  
Antiguo 15-05-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
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
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #7  
Antiguo 15-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por egostar Ver Mensaje
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
Responder Con Cita
  #8  
Antiguo 15-05-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
¿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)
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #9  
Antiguo 15-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #10  
Antiguo 16-05-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
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 forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
comparar una cadena y consultar UREÑA Conexión con bases de datos 1 19-06-2007 18:46:56
comparar cadena de dos textos coyule Varios 10 31-05-2007 18:32:37
comparar 1 fecha contra la actual amadis SQL 16 02-02-2007 03:35:34
comparar dbedit contra registros de una tabla dmagui Conexión con bases de datos 5 19-07-2006 13:59:09
Comparar caracteres tecleados con los de una cadena Calculador Varios 1 16-01-2005 18:36:35


La franja horaria es GMT +2. Ahora son las 19:29:18.


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
Copyright 1996-2007 Club Delphi