Mostrando las entradas con la etiqueta SQL. Mostrar todas las entradas
Mostrando las entradas con la etiqueta SQL. Mostrar todas las entradas

miércoles, 13 de febrero de 2013

ORACLE SQL - Renglones en una sola columna

Supongamos que tenemos esta tabla:

create table test2(nombre varchar(7));

Y con estos datos:

insert into test2 values('uno');
insert into test2 values('dos');
insert into test2 values('tres');
insert into test2 values('cuatro');
insert into test2 values('cinco');
insert into test2 values('seis');
insert into test2 values('siete');
insert into test2 values('ocho');
insert into test2 values('nueve');
insert into test2 values('diez');
commit;

Si revisamos los datos vemos:

select * from test2
NOMBRE
-------
uno
dos
tres
cuatro
cinco
seis
siete
ocho
nueve
diez
10 rows selected
Y ahora queremos obtener esos 10 renglones en uno solo y en una sola columna

WITH DATOS
AS (SELECT 1 DUMMY, NOMBRE FROM TEST2 )
SELECT  LTRIM(MAX( SYS_CONNECT_BY_PATH ( NOMBRE, ',')),',') NOMBRES
    FROM
    (SELECT  DUMMY, NOMBRE,
             ROW_NUMBER() OVER ( PARTITION BY DUMMY  ORDER BY DUMMY) RN
    FROM  DATOS )
    CONNECT  BY  DUMMY = PRIOR DUMMY
            AND  RN     = PRIOR RN+1
    START WITH RN = 1
   GROUP BY DUMMY;

Y obtenemos:

NOMBRES
-----------------------------------------------------------------------------
uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez
Espero les sea de utilidad.

martes, 25 de septiembre de 2012

Convertir de Números a Letras usando SQL (Oracle)

Para obtener por SQL la conversión de números a letras podemos usar lo siguiente:

SELECT TO_CHAR ( TO_DATE ( TO_CHAR ( 2012, '99999999999') , 'J'),  'JSP') EN_LETRAS FROM dual;
De lo cual obtenemos:

EN_LETRAS                                                                 
---------------------------------------------------------------------------
TWO THOUSAND TWELVE
1 row selected

Bien, podemos obtener desde el número 1 hasta 5,373,484 y es por la restricción de las fechas julianas (como fecha máxima tenemos 31-Dic-9999)

Explicando el por que y cómo:

Si vamos separando las operaciones que realiza observamos:

1. La primera conversión
TO_CHAR ( 2012, '99999999999') tan solo pasa el número a cadena
2. La segunda operación TO_DATE ( TO_CHAR ( 2012, '99999999999') , 'J') es donde convierte la cadena obtenida en fecha juliana.
3. La tercera parte, donde volvemos esta fecha obtenida en cadena nuevamente, utilizamos la máscara ‘JSP’ en donde J hace referencia a la fecha Juliana, y SP lo lleva a letras (Spell)

Y listo!! Tienes el número en letras.

Espero les sea de utilidad

Translate