• Sábado 20 de Abril de 2024, 04:55

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - ludigova

Páginas: [1]
1
Visual FoxPro / Funciones Substr y At
« en: Martes 4 de Enero de 2011, 18:09 »
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.

Páginas: [1]