Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Oracle (http://www.forosdelweb.com/f100/)
-   -   maximo (http://www.forosdelweb.com/f100/maximo-570807/)

alexis17 30/03/2008 14:32

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

kikolice 31/03/2008 14:41

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)

MutenRo 03/04/2008 08:33

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.

alexis17 04/04/2008 08:27

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'), ' ', '')

MutenRo 07/04/2008 02:42

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()).

kikolice 07/04/2008 19:35

Re: maximo
 
Cita:

Iniciado por MutenRo (Mensaje 2352703)
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??


La zona horaria es GMT -6. Ahora son las 09:09.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.