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

maximo

Estas en el tema de maximo en el foro de Oracle en Foros del Web. buenas tardes estoy sacando el valor maximo de un campo pero ese campo es varchar lo estoy haciendo asi select concat('MA', max(substr(tipo,3))+1) into :is_cod_tipo from ...
  #1 (permalink)  
Antiguo 30/03/2008, 14:32
 
Fecha de Ingreso: diciembre-2007
Ubicación: Panama
Mensajes: 100
Antigüedad: 17 años
Puntos: 0
maximo

buenas tardes

estoy sacando el valor maximo de un campo pero ese campo es varchar

lo estoy haciendo asi


select concat('MA', max(substr(tipo,3))+1)
into :is_cod_tipo
from tipos
where tipo like 'MA%';


ya que los codigos son

MA245

osea que el campo tiene 5 posiciones

de esa forma me funciona bien

el problema es si tengo un codigo que sea ejemplo

MA040


entonces cuando intento sacar el valor maximo me manda es
MA41

y no

MA041

como podria solucionar eso
  #2 (permalink)  
Antiguo 31/03/2008, 14:41
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 9 meses
Puntos: 7
Re: maximo

como el max se esta evaluando sobre un varchar por eso te regresa ese resultado, no tengo chance de probarlo pero checa si funciona con

concat('MA', max(to_number(substr(tipo,3)))+1)
__________________
Blogzote.com :-) Mi blog
  #3 (permalink)  
Antiguo 03/04/2008, 08:33
 
Fecha de Ingreso: marzo-2008
Ubicación: Euskadi
Mensajes: 64
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: maximo

Hola,

puedes hacerlo de esta manera (lo he comprobado y funciona):

Código:
SELECT CONCAT('MA', REPLACE(TO_CHAR(MAX(SUBSTR(TIPO,3))+1, '000'), ' ', '')) FROM TIPOS WHERE TIPO LIKE 'MA%';
Espero que te sea sirva.
  #4 (permalink)  
Antiguo 04/04/2008, 08:27
 
Fecha de Ingreso: diciembre-2007
Ubicación: Panama
Mensajes: 100
Antigüedad: 17 años
Puntos: 0
Re: maximo

listo men gracias me funciono

lo que no entendi fue esta parte
de comillas
y bueno creo que dice sume y despues coloque lso 0 adelante si hay espacio

'000'), ' ', '')
  #5 (permalink)  
Antiguo 07/04/2008, 02:42
 
Fecha de Ingreso: marzo-2008
Ubicación: Euskadi
Mensajes: 64
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: maximo

Con el TO_CHAR(...., '000') lo que conseguimos es que se añadan ceros delante si hace falta para obtener 3 dígitos, pero esta función devuelve también un espacio en blanco para números positivos, de ahí que sea necesario el REPLACE(....., ' ','') para quitarlo (supongo que también se podía haber utilizado la función TRIM()).
  #6 (permalink)  
Antiguo 07/04/2008, 19:35
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 9 meses
Puntos: 7
Re: maximo

Cita:
Iniciado por MutenRo Ver Mensaje
Con el TO_CHAR(...., '000') lo que conseguimos es que se añadan ceros delante si hace falta para obtener 3 dígitos, pero esta función devuelve también un espacio en blanco para números positivos, de ahí que sea necesario el REPLACE(....., ' ','') para quitarlo (supongo que también se podía haber utilizado la función TRIM()).
y eso no se lograba con el lpad o rpad??
__________________
Blogzote.com :-) Mi blog
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 07:58.