Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-07-2004
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
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.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #2  
Antiguo 28-07-2004
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
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
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 22:23:27.


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