Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Buscar un dato a partir de una Cadena mas larga

Estas en el tema de Buscar un dato a partir de una Cadena mas larga en el foro de Mysql en Foros del Web. Hola amigos, es la primera vez que consulto por este medio, y de antemano presento mis agradecimientos por la ayuda que me puedan brindar, Mi ...
  #1 (permalink)  
Antiguo 25/05/2011, 19:19
Avatar de Fabio_HR  
Fecha de Ingreso: junio-2010
Mensajes: 8
Antigüedad: 13 años, 10 meses
Puntos: 1
Buscar un dato a partir de una Cadena mas larga

Hola amigos, es la primera vez que consulto por este medio, y de antemano presento mis agradecimientos por la ayuda que me puedan brindar,

Mi caso es el siguiente,
Tengo un campo 'prefix' con valores como '886' entre 60 mil registros más, ahora necesito filtrar ese registro (886) a partir de la cadena '8865248841'

tal vez sea algo sencillo pero estoy pegado alli desde hace algunos dias, creo que se hace con REGEXP, no lo he probado pero no me da.


Agradezco la ayuda,


Fabio
  #2 (permalink)  
Antiguo 25/05/2011, 21:20
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 19 años
Puntos: 79
Respuesta: Buscar un dato a partir de una Cadena mas larga

hola consulta sobre los LIKE en SQL

ayuda: campo LIKE "%886%"

salu2
__________________
Numerador Mp3 en Access =)
http://www.mediafire.com/download/r9...pdw/mp3(2).zip
  #3 (permalink)  
Antiguo 26/05/2011, 08:25
Avatar de Fabio_HR  
Fecha de Ingreso: junio-2010
Mensajes: 8
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Buscar un dato a partir de una Cadena mas larga

Hola Perr0,

Gracias por responder, sin embargo la situacion es la siguiente:

El valor que tengo almacenado en el campo 'prefix' es el 886, y la cadena que tengo para encontrarlo es '8865248841' por lo tanto en la sentencia no puedo enviar '886' sino que este debera ser encontrado a partir de los primeros digitos de la cadena,

Gracias,

Sludos
  #4 (permalink)  
Antiguo 26/05/2011, 08:42
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 19 años
Puntos: 79
Respuesta: Buscar un dato a partir de una Cadena mas larga

hola Fabio_HR

Mi respuesta fue bien vaga porque no entiendo tu consulta, podrias especificar como esta compuesta tu tabla (solo los campos referente a tu consulta) y como realizas esta consulta.

Si alguien mas te entendio ojala te responda.

salu2
__________________
Numerador Mp3 en Access =)
http://www.mediafire.com/download/r9...pdw/mp3(2).zip
  #5 (permalink)  
Antiguo 26/05/2011, 08:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Buscar un dato a partir de una Cadena mas larga

Razónalo así:
Código MySQL:
Ver original
  1. LIKE "886%"
Eso hace que sólo devuelva los que al principio tienen "886, tengan lo que tengan después de eso.

Si no es esto, describe mejor tabla, escenario, datos y recién entonces veremos cómo es la cosa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 26/05/2011, 09:25
Avatar de Fabio_HR  
Fecha de Ingreso: junio-2010
Mensajes: 8
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Buscar un dato a partir de una Cadena mas larga

Ok, Presento disculpas por mi imprecisión en la pregunta;

en mi tabla tengo los siguientes datos:

prefix vlr1 vlr2
886 125 524
887 145 487
8875 452 684
88863 357 465

$cadena = 8865248841;

Ahora necesito obtener el vlr1 para $cadena (encontrando el prefijo con el que coincide '886')

Lo que me propone gnzsoloyo seria para si tuviese almacenada la cadena larga, pero mi caso es al contrario.

Espero haber sido mas claro esta vez,

de todas maneras agradezco el animo de ayudar.

Saludos.
  #7 (permalink)  
Antiguo 26/05/2011, 09:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Buscar un dato a partir de una Cadena mas larga

Un paseo por el manual de referncia puede ser una buena idea: MySQL 5.0 Reference Manual :: 12 Funciones y operadores
Usa INSTR().
Cita:
INSTR(str,substr)

Retorna la posición de la primera ocurrencia de la subcadena substr en la cadena str. Es lo mismo que la forma de dos argumentos de LOCATE(), excepto que el orden de los argumentos es inverso.
Código MySQL:
Ver original
  1. mysql> SELECT INSTR('foobarbar', 'bar');
  2.         -> 4
  3. mysql> SELECT INSTR('xbar', 'foobar');
  4.         -> 0
Esta función puede trabajar con múltiples bytes. En MySQL 5.0, sólo es sensible a mayúsculas si uno de los argumentos es una cadena binaria.
o bien LOCATE()
Cita:
LOCATE(substr,str) , LOCATE(substr,str,pos)
La primera sintaxis retorna la posición de la primera ocurrencia de la subcadena substr en la cadena str. La segunda sintaxis retorna la posición de la primera ocurrencia de la subcadena substr en la cadena str, comanzando en la posición pos. Retorna 0 si substr no está en str.
Código MySQL:
Ver original
  1. mysql> SELECT LOCATE('bar', 'foobarbar');
  2.         -> 4
  3. mysql> SELECT LOCATE('xbar', 'foobar');
  4.         -> 0
  5. mysql> SELECT LOCATE('bar', 'foobarbar',5);
  6.         -> 7
Esta función trabaja con múltiples bytes. En MySQL 5.0, es sensible a mayúsculas sólo si algún argumento es una cadena binaria.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 26/05/2011, 10:11
Avatar de Fabio_HR  
Fecha de Ingreso: junio-2010
Mensajes: 8
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Buscar un dato a partir de una Cadena mas larga

Amigo gnzsoloyo,
que pena de verdad con usted, pero no logro determinar la forma de implementar esa solución, ya que para este caso no conozco el valor del primer str, el es un registro en la tabla y luego de ubicarlo necesito obtener es el valor de otro campo, como lo mencionaba en un mensaje anterior 'vlr1',

realmente lo que yo nocesito es colo un LIKE pero el contrario, ya que LIKE busca un valor mas largo a partir de un valor corto inicial, Para mi caso, yo tengo una cadena muy larga, y necesito sabes cual de todos los prefijos, es el que me sirve, adicionalmente, nisiquiera se cuantos caracteres de toda mi cadena son el prefijo, esto puede variar de 2 a tal vez 10.

Saludos
  #9 (permalink)  
Antiguo 26/05/2011, 10:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Buscar un dato a partir de una Cadena mas larga

Veamos...
¿Es algo así lo que quieres hacer?:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS tabla;
  2. Query OK, 0 rows affected (0.03 sec)
  3.  
  4. mysql> CREATE TABLE tabla(
  5.     ->   PREFIX VARCHAR(20),
  6.     ->   VLR1 INT,
  7.     ->   VLR2 INT);
  8. Query OK, 0 rows affected (0.03 sec)
  9.  
  10. mysql> INSERT INTO TABLA VALUES
  11.     -> ('886',125, 524),
  12.     -> ('887' ,145, 487),
  13.     -> ('8875' ,452, 684),
  14.     -> ('88863' ,357, 465);
  15. Query OK, 4 rows affected (0.00 sec)
  16. Records: 4  Duplicates: 0  Warnings: 0
  17.  
  18. mysql> SELECT * FROM tabla WHERE INSTR('8865248841', prefix)=1;
  19. +--------+------+------+
  20. | PREFIX | VLR1 | VLR2 |
  21. +--------+------+------+
  22. | 886    |  125 |  524 |
  23. +--------+------+------+
  24. 1 row in set (0.00 sec)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 26/05/2011, 10:56
Avatar de Fabio_HR  
Fecha de Ingreso: junio-2010
Mensajes: 8
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Buscar un dato a partir de una Cadena mas larga

SIIIIIIIIIIIIII, MUUUUCHISSISISISISISMAS GRACIAS

Es usted un verdadero Erudito, no me salen las palabras para agradecerle.
  #11 (permalink)  
Antiguo 26/05/2011, 10:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Buscar un dato a partir de una Cadena mas larga

Bueno, era lo mismo que te planteaba antes, sólo que me parece que te estabas confundiendo con alguna otra cosa...
Esa sintaxis que te paso sólo devolverá aquellos registros de prefijos que en la cadena de referencia estén al inicio, de allí el "=1".

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:50.