Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Identificar el tipo de dato (https://www.clubdelphi.com/foros/showthread.php?t=12803)

kayetano 28-07-2004 14:07:08

Identificar el tipo de dato
 
Hola

Tengo que realizar unos cambios en una programación pero no puedo tocar la estructura de la base de datos.

Os pongo en situación:
En una sección del programa se pueden realizar consultas sobre todos los artículos seleccionando unas características (en un desplegable) y el posible valor de esa característica ( en otro desplegable ).
Un valor de una característica puede ser cualquier cosa, texto, numeros o lo que se le ocurra ya que se guarda en un tipo varchar.
Ahora me piden que si los valores de la característica son números (aunque almacenados en un campo varchar) en vez de mostrar el desplegable "VALOR" muestre dos desplegables "DESDE" y "HASTA".

Mi problema esta en como detectar si un dato guardado en un varchar es numérico y si el todos los valores de esta característica son numericos.

Estoy haciendo algunas pruebas del siguiente modo:
Código SQL [-]
SELECT valor, if( 0+valor, 0+valor, NULL ) AS valorNum 
FROM car_art 
WHERE ...
con esto obtengo el valor como cadena y el valor como número, pero con el siguiente comportamiento:
- si valor es 0, valorNum es NULL.
- si valor es un numero mayor de 0, valorNum es un número ( ej. "10" ).
- si valor es una cadena iniciada por un numero, valorNum es númerico (ej. "10 cm" ).
- si valor es una cadena iniciada por espacios y numeros, valorNum es un número (ej. " 10 cm" ).
- si valor es una cadena de texto iniciada por letras, valorNum es NULL.

Todas esta pruebas me habían animado mucho hasta que detecte valores del tipo "100x50" con lo que valorNum es 100.

Por lo tanto estoy a punto de descartar esta opción, y os pido vuestra colavoración para que propongáis sistemas alternativos para detectar si un dato guardado en un varcha es numérico o no.
Estoy pensando en añadir algun tipo de marca al inicio del valor tipo "#" o algo por el estilo, pero espero vuestras sugerencias para continuar.

Gracias a todos.

roman 28-07-2004 19:43:54

Una opción sería leer el valor a una variable en Delphi y usar funciones como Val para determinar si es o no un número.

Si requieres hacerlo en la misma consulta podrías intentar algo como:

Código SQL [-]
select
  valor,
  if(concat(valor+0, "") = valor, valor, null) as valorNum
from car_art

es decir, conviertes valor a número y de vuelta a cadena y checas si coincide con el original, en cuyo caso significa que es un número.

Aunque así, valores como 10cm los pone como NULL y no me queda claro si tales valores los quieres identificar como numéricos o no.

// Saludos


La franja horaria es GMT +2. Ahora son las 21:48:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi