• Lunes 18 de Noviembre de 2024, 02:27

Autor Tema:  Funciones Substr y At  (Leído 3689 veces)

ludigova

  • Nuevo Miembro
  • *
  • Mensajes: 3
  • Nacionalidad: cr
    • Ver Perfil
Funciones Substr y At
« en: Martes 4 de Enero de 2011, 18:09 »
0
Buenos Días

Tengo un pequeño problema que no he sabido como resolver con el uso de las funciones SUBSTR y AT, cuando las uso combinadas directamente en un SQL.

Les pongo un ejemplo de lo que se y de lo que necesito resolver

Se que puedo usar estas funciones de las siguiente manera

Cadena = 'Hola como Estan'

MiCadena = substr(Cadena,1,AT(" ",CADENA)-1)

Entonces MiCadena contendría la palabra "Hola"

Esto funciona perfectamente, no tengo problemas con esto

Ahora bien supongamos que tengo una tabla llamada Productos con estos datos

Codigo_____________________ Descripcion
12345 _____________________Tornillo para gypson
12346 _____________________Tornillo infinito
12347 _____________________Clavos de Acero
12348 _____________________Clavos de 2 pulgados
12349 _____________________Gypson 3x2x0.5

Necesito obtener la primer palabra, es decir hasta el primer espacio en blanco, del campo Descripcion.

A simple vista se ve que la primer palabra es de longitud variable por lo que utilizo la función AT para saber donde esta el primer espacio es blanco y el valor devuelto lo uso como el tercer parámetro de la función SUBSTR.

Dicho lo anterior yo hago una consulta de la siguiente manera:

SELECT DISTINCT SUBSTR(Descripcion, 1,AT(" ",Descripcion)-1) FROM Productos

Al ejecutarlo yo esperaría que me retornara:

Tornillo
Clavos
Gypson

Pero me esta regresando solo la primer letra de la palabra como si no encontrará el espacio en blanco en la Descripcion. Por lo que ejecute el siguiente SQL para comprobarlo:

SELECT Descripcion, AT(" ",Descripcion) as Donde FROM Productos y me regresa la siguiente informacion:

Descripcion_____________________Donde
Tornillo para gypson__________________9
Tornillo infinito______________________9
Clavos de Acero______________________7
Clavos de 2 pulgados__________________7
Gypson 3x2x0.5______________________7

Al ejecutar esto compruebo que la función AT hace lo que tiene que hacer. Nuevamente compruebo con una consulta similar

SELECT Descripcion, AT(" ",Descripcion) as Donde, SUBSTR(Descripcion,1, AT(" ",Descripcion)-1) Palabra FROM Productos

Descripcion____________Donde____________Palabra
Tornillo para gypson_________9________________T
Tornillo infinito_____________9________________T
Clavos de Acero_____________7________________C
Clavos de 2 pulgados_________7________________C
Gypson 3x2x0.5_____________7________________G

Como pueden ver el al usar estas funciones combinadas DIRECTAMENTE en una CONSULTA, el resultado no es el esperado. Sin embargo fuera de una consulta funciona perfectamente.

Si alguien me puede ayudar o dar alguna explicación que me aclare porque fox se comporta de esta manera y que puedo hacer para solucionarlo.

Les agradezco la atención y la ayuda.

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Funciones Substr y At
« Respuesta #1 en: Miércoles 5 de Enero de 2011, 15:10 »
0
Hola, bienvenido al foro.
Si es un comportamiento normal.
Pero la explicación a detalle la puedes saber leyendo en la ayuda sobre SET EXACT y SET ANSI ON.
Para tú caso, si logré comprender bien, creo que se corrige con SET ANSI ON.

Saludos y feliz año nuevo.
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

ludigova

  • Nuevo Miembro
  • *
  • Mensajes: 3
  • Nacionalidad: cr
    • Ver Perfil
Re: Funciones Substr y At
« Respuesta #2 en: Miércoles 5 de Enero de 2011, 22:13 »
0
Hola Juez gracias por la Bienvenida, Mis mejores deseos para usted también.

Primero que nada gracias por su pronta respuesta. Le comento que visual fox pro 6.0 fue mi primer lenguaje en entorno gráfico pero lo deje de usar por mucho tiempo por lo cual perdí un poco de práctica, pero siempre me gusto y ahora lo retomo para ayudar a un amigo con un programa.

Busque el ayuda del SET ANSI y SET EXACT tal como me recomendó, por lo que entendí activar o desactivar estas propiedades SOLO afecta la forma en como se realizan las comparaciones de cadenas haciendo que el operador "=" se comporte como el "==".  Hice algunas pruebas y logre comprender el funcionamiento de estos comandos. Sin embargo mi problema persistía, y no lograba el resultado que esperaba.


Seguí buscando información y encontré una solución, que sin embargo no comprendo del todo, y es usando la función de relleno PADR, de la siguiente manera:
  SELECT DISTINCT ALLTRIM(PADR(SUBSTR(Descripcion, 1,AT(" ",Descripcion)-1),35)) Palabra FROM Productos

Al ejecutar esta consulta obtengo el resultado esperado, es decir:

Palabra
Tornillo
Clavos
Gypson

Uso 35 por que es la longitud original del campo Descripcion y luego la función ALLTRIM para quitar los caracteres que sobran.

Con esta solución me doy por satisfecho, pero me queda la espinita de porque simplemente no puedo usar SUBSTR(Descripcion, 1,AT(" ",Descripcion)-1) en el SELECT para retornar hasta el primer espacio en blanco.

Si tiene alguna información al respecto le agradezco la comparta con migo.

ludigova

  • Nuevo Miembro
  • *
  • Mensajes: 3
  • Nacionalidad: cr
    • Ver Perfil
Re: Funciones Substr y At
« Respuesta #3 en: Miércoles 12 de Enero de 2011, 17:03 »
0
Buenos días
      Considero que este tema se puede cerrar, a menos que algún Administrador o miembro activo este investigando algo más.