Avances tecnológicos del siglo XXI y ejemplos de estos
Cap. iv bdd ii
1. INDICE
OBJETIVOS………………………………………………………………………………………………………..3
INTRODUCCIÓN………………………………………………………………………………………………..4
4.1 TIPOS DE DATOS……………………………………………………………………………………5
4.1.1 DATOS NUMERICOS………………………………………………………………………………….5
4.1.2 DATOS CARÁCTER…………………………………………………………………………………….6
4.1.3 DATOS TIPO FECHA…………………………………………………………………………………..8
4.1.4 DATOS BINARIOS……………………………………………………………………………………...9
4.1.5 OTROS………………………………………………………………………………………………………9
4.1.6 TIPOS DE DATOS PERSONALIZADOS…………………………………………………………10
4.2 FUNCIONES
4.2.1 INTRODUCCION………………………………………………………………………………………11
4.2.2 FUNCIONES TIPO CARÁCTER…………………………………………………......... 11
4.2.3 FUNCIONES NUMERICAS………………………………………………………………………….18
4.2.4 FUNCIONES FECHAS…………………………………………………………………………………19
4.2.5 FUNCIONES DE CONVERSION……………………………………………………………………21
4.2.6 OTRAS FUNCIONES…………………………………………………………………………………...23
BIBLIOGRAFÍA………………………………………………………………………………...24
2. BASE DE DATOS II 1
OBJETIVOS
Conocer los diferentes tipos de datos y sus características.
La idea fundamental es indicar la forma de escribir
declaraciones correctas en Oracle o SQL, familiarizándose así
con los objetos de base de datos.
Aprender una regla general, cuando se escriben declaraciones.
[Escriba texto] Página 1
3. BASE DE DATOS II 2
INTRODUCCIÓN
Las bases de datos son una parte fundamental de cualquier aplicación, pues en
ellas se almacenan información trascendental para el buen desempeño de las
mismas. Con el desarrollo de los distintos sistemas de gestión de bases de datos
(SGBD), algunos de ellos fueron ganando en preferencia para los diferentes
usuarios; por sus características de seguridad, configuración, conectividad, etc.
Todos los campos de una tabla tienen propiedades. Éstas definen las
características y el comportamiento del campo. La propiedad más importante de
un campo es su tipo de datos. El tipo de datos de un campo determina la clase de
datos que va a poder almacenar. Por ejemplo, un campo cuyo tipo de datos sea
Texto podrá almacenar datos que se compongan de caracteres de texto, mientras
que un campo cuyo tipo de datos sea Número sólo podrá almacenar datos
numéricos.
Como veremos El lenguaje SQL está compuesto por comandos, cláusulas,
operadores y funciones de agregado. Estos elementos se combinan en las
instrucciones para crear, actualizar y manipular las bases de datos.
[Escriba texto] Página 2
4. BASE DE DATOS II 3
CONTENIDO
IV. TIPOS DE DATOS Y FUNCIONES ASOCIADAS
4.1 TIPOS DE DATOS
Un tipo de datos es un atributo que especifica el tipo de datos que el objeto puede
contener: datos de enteros, datos de caracteres, datos de moneda, datos de fecha y
hora, cadenas binarias, etc.
4.1.1. Datos Numéricos
El tipo de datos NUMBER es utilizado para guardar los números cero, negativos, positivos, fijos y de
punto flotante, con hasta 38 dígitos de precisión. Los números van desde del 1.0x10 -130 hasta 1.0x10
126.
Los NUMBER pueden ser definidos de tres formas:
NUMBER(p,s)
Donde p es la precisión de hasta 38 dígitos y s es la escala (número de dígitos a la derecha del punto
decimal)
NUMBER (p)
Es este un número de punto fijo con una escala de cero y precisión de p.
NUMBER
Este es un número punto flotante con una precisión de 38. La siguiente tabla muestra como Oracle
almacena las diferentes escalas y precisiones:
Dato actual Definido como Almacenado como
7,456,123.89 NUMBER 7456123.89
7,456,123.89 NUMBER(*,1) 7456123.9
7,456,123.89 NUMBER(9) 7456124
7,456,123.89 NUMBER(9,2) 7456123.89
7,456,123.89 NUMBER(9,1) 7456123.9
7,456,123.89 NUMBER(6) (no aceptado, excede la precisión)
7,456,123.89 NUMBER(7,-2) 7456100
[Escriba texto] Página 3
5. BASE DE DATOS II 4
4.1.2. Datos Carácter
Existen cuatro tipos de datos para caracteres:
El tipo de datos CHAR es utilizado como un campo de largo fijo. El tamaño puede ser especificado entre
1 y 255 caracteres en versión 7 y entre 1 y 2000 en versión 8. El tamaño por defecto es 1. Cuando no se
indica dato de entrada, se llena con tantos espacios en blanco como sea necesario para llegar al
tamaño especificado.
El VARCHAR2 es utilizado para campos de largo variable. Debe indicarse para este tipo de datos el
tamaño al utilizar el tipo de datos. El largo máximo es de 2000 caracteres en versión 7 y 4000 en
versión 8.
El tipo de datos LONG es utilizado para cantidades variables de texto muy grandes. Cualquier largo
hasta 2 GB puede indicarse. Algunas restricciones para el uso de este tipo de datos son:
Sólo puede haber una columna de este tipo por ta21bla.
Una columna LONG no puede ser indexada.
Una columna LONG no puede ser pasada como parámetro de un procedimiento o función.
Una función no puede ser utilizada para retornar un valor de tipo LONG.
Una columna de tipo LONG no puede ser utilizada en el where, order by, group by o connect de
una sentencia SQL.
El tipo de datos VARCHAR es sinónimo de VARCHAR2. Oracle Corporation está reservando este
para uso futuro. No usarlo.
Los tipos de datos NCHAR y NVARCHAR2 (solo versión 8) permiten almacenar caracteres del NLS.
NCHAR guarda hileras de caracteres de largo fijo que corresponden a un conjunto de caracteres de
largo fijo o variable. El NVARCHAR2 guarda hileras de largo variable.
Cuando se utilizan estos tipos NCHAR o NVARCHAR2, se debe especifica el tamaño máximo que puede
el número de caracteres (para conjuntos de caracteres de largo fijo) o el número de bytes (para un
conjunto de caracteres de largo variable).
El largo máximo para las columnas NCHAR es de 2000 bytes, o bien el número de máximo de
caracteres que pueden ser grabados en 2000 bytes.
El largo máximo para las columnas NVARCHAR2 es de 4000 bytes, o bien el número de máximo
de caracteres que pueden ser grabados en 4000 bytes.
[Escriba texto] Página 4
6. BASE DE DATOS II 5
Los tipos de datos de cadenas de caracteres de JDBC son CHAR, VARCHAR y LONGVARCHAR. También
pueden ser NCHAR, NVARCHAR y LONGNVARCHAR. Estos nuevos tipos de cadena de caracteres
mantienen los tipos de caracteres nativos de Java en formato Unicode y quitan la necesidad de realizar
cualquier conversión ANSI a Unicode o Unicode a ANSI.
Dato Carácter Características
Almacena cadenas de caracteres de una longitud variable. La longitud máxima
VARCHAR2 (tamaño)
son 4000 caracteres.
CHAR (tamaño) Almacena caracteres con una longitud fija. Siendo 2000 caracteres el máximo
Tipo Descripción
Longitud Los tipos de datos char y nchar de SQL Server se asignan directamente a los tipos CHAR y
fija NCHAR de JDBC. Estos son tipos de longitud fija con relleno que proporciona el servidor en
el caso de que la columna tenga habilitado SET ANSI_PADDING ON. El relleno siempre está
habilitado para nchar, pero en el caso de char, si las columnas char del servidor no tienen
relleno, el servidor lo agrega el controlador JDBC.
Longitud Los tipos de datos varchar y nvarchar de SQL Server se asignan directa y respectivamente
variable VARCHAR y NVARCHAR de JDBC.
Long Los tipos text y ntext de SQL Server se asignan respectivamente a los tipos LONGVARCHAR
y LONGNVARCHAR de JDBC. Estos son tipos que ya no se utilizan desde SQL Server 2005,
por lo que en su lugar debería usar tipos de valores mayores, varchar(max) o
nvarchar(max). No se pueden usar los métodos update<Numeric Type> y updateObject (int,
java.lang.Object) con las columnas de servidor text y ntext. No obstante, se admite el uso
del método setObject con un tipo específico de conversión de caracteres en columnas text y
ntext del servidor.
[Escriba texto] Página 5
7. BASE DE DATOS II 6
4.1.3. Datos Fecha
A la hora de almacenar fechas, hay que tener en cuenta que Mysql no comprueba de una manera
estricta si una fecha es válida o no. Simplemente comprueba que el mes esta comprendido entre 0 y 12
y que el día esta comprendido entre 0 y 31.
Date: tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al 31 de
diciembre de 9999. El formato de almacenamiento es de año-mes-día
DateTime: Combinación de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0
horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos. El
formato de almacenamiento es de año-mes-día horas:minutos:segundos
TimeStamp: Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al año 2037. El
formato de almacenamiento depende del tamaño del campo:
Tamaño Formato
14 AñoMesDiaHoraMinutoSegundo aaaammddhhmmss
12 AñoMesDiaHoraMinutoSegundo aammddhhmmss
8 ñoMesDia aaaammdd
6 AñoMesDia aammdd
4 AñoMes aamm
2 Año aa
Time: almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59
minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS'
Year: almacena un año. El rango de valores permitidos va desde el año 1901 al año 2155. El campo
puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el año con dos o cuatro
dígitos.
Tipo de Campo Tamaño de Almacenamiento
DATE 3 bytes
DATETIME 8 bytes
TIMESTAMP 4 bytes
TIME 3 bytes
YEAR 1 byte
[Escriba texto] Página 6
8. BASE DE DATOS II 7
4.1.4 Tipos de datos binarios
Permiten almacenar información en formato "crudo", valores binarios tal y como se almacenan en el
disco duro o como residen en memoria. Estas columnas se pueden utilizar tanto para almacenar
grandes cantidades de datos (hasta 4Gb.),
Tipo de dato LONG: Almacena caracteres de longitud variable hasta 2 Gb. En Oracle8 y siguientes
versiones se deben usar los tipos de datos CLOB y NLOB para almacenar grandes cantidades de datos
alfanuméricos.
4.1.5 Otros Tipos de Datos
Cada fila en la base de datos tiene una dirección. Esta dirección puede ser obtenida por medio de la
función ROWID. . El formato es el siguiente (versión 7):
BLOCK.ROW.FILE
BLOCK es el bloque de datos de archivo de datos FILE conteniendo el ROW. Estos datos se dan en
formato hexadecimal y el tipo de datos es ROWID.
Este valor no puede ser exportado, pues al importarse la dirección del registro es casi seguro que
variará.
El ROWID extendido (versión 8) tiene el siguiente formato:
OOOOOOFFFBBBBBBRRR
Donde:
OOOOOO es el número de objeto de datos que identifica el segmento de la base de datos. Objetos que
se encuentren en un mismo segmento, como un cluster de tablas, tiene el mismo número de objeto de
datos.
FFF es el datafile que contiene la fila.
BBBBBB este el bloque de datos que contiene la fila y son relativos al datafile (no al tablespace)
RRR la fila en el bloque.
Finalmente el MLSLABEL es un tipo de datos utilizado para almacenar el formato binario de etiquetas
(labels), utilizado en sistemas operativos seguros.
[Escriba texto] Página 7
9. BASE DE DATOS II 8
4.1.6 Tipos de Datos Definidos por el Usuario
Además de los tipos vistos (built-in datatypes), Oracle permite definir nuevos tipos de datos a los
usuarios.
Basado en el concepto de objeto, permite crear tipos como objetos del mundo real, los cuales tiene
tres componentes básicos:
Un nombre, el cual lo identifica de forma única en un esquema.
Atributos, los cuales pueden ser de tipo predefinidos u otros tipos definidos por el usuario.
Métodos, los cuales son funciones o procedimientos escritos en PL/SQL y almacenados en la
base de datos, o bien escritos en C o Java y almacenados externamente.
Para poder distinguir un objeto de otro dentro de la base de datos se define el object identifier (OID),
para poder representar estas identificaciones existe el tipo REF, el cual es el contenedor de un
identificador de objeto, el cual es básicamente un puntero a un objeto.
Otros tipos de datos son los VARRAY, los cuales permiten definir tablas del tipo de datos seleccionado.
[Escriba texto] Página 8
10. BASE DE DATOS II 9
4.2 Funciones
4.2.1Introducción.
* Las funciones trabajan con columnas variables o constantes
EJ:) pasar a minúscula el valor de una columna. //UPPER
* Las funciones se utilizan en:
SELECT’s WHERE y ORDER BY
* Se pueden anidar.
4.2.2 Funciones con cadenas de caracteres.
¨ CONCAT(c
ad1,cad2) -> Devuelve cad1 concatenado con cad2. Sólo admite 2 parámetros.
EJ 1:
SELECT CONCAT(‘El apellido es:’,apellido) FROM EMPLE;
CONCAT ('ELAPELLIDOES:', AP
-------------------------
El apellido es: SÁNCHEZ
El apellido es: ARROYO
El apellido es: SALA
El apellido es: JIMÉNEZ
El apellido es: MARTÍN
El apellido es: NEGRO
El apellido es: CEREZO
El apellido es: GIL
El apellido es: REY
El apellido es: TOVAR
El apellido es: ALONSO
El apellido es: JIMENO
El apellido es: FERNÁNDEZ
El apellido es: MUÑOZ
[Escriba texto] Página 9
11. BASE DE DATOS II 10
EJ 2: Teniendo la tabla EMPLE efectuar la consulta que nos devolvería...
Sánchez es Empleado
Arroyo es Vendedor
.........
SELECT CONCAT (apellido,CONCAT(’ es ‘, oficio)) FROM EMPLE;
¨ LOWER -> Devuelve la cadena <<cad>> con todas las letras convertidas a
minúsculas.
¨ UPPER -> Igual pero a MAYUSCULAS.
EJ 3: Obtención del nombre de los empleados minúsculas y mayúsculas
respectivamente.
SELECT LOWER(apellido) FROM EMPLE;
SELECT UPPER(apellido) FROM EMPLE;
¨ INITCAP(cadena) Convierte la primera letra de cada palabra de la cadena <cad> a MAYÚSCULAS y
el resto a minúsculas.
EJ 4: Convertir a Título...
SELECT INITCAP(‘DESARROLLO de aplicaciones informáticas’)
FROM DUAL;
¨ LPAD(cad1,n[,cad2]) ->Esta función añade caracteres a la izq. De la cadena <cad1>
hasta que alcance una cierta longitud <n>. Devuelve <cad1> con longitud <n> y ajustado
a la derecha; <cad2> es la cadena con la q se rellena por la izq. <cad1> puede ser una
columna de una tabla o un literal. Si <cad2> se suprime se asume como carácter de
relleno el BLANCO. Sirve para rellenar con ceros.
[Escriba texto] Página 10
12. BASE DE DATOS II 11
EJ 5: Por cada fila de la tabla NOTAS_ALUMNOS, obtener el nombre del alumno de
tal manera q tenga una longitud de 30 caracteres y rellenado a la izq. Por puntos.
SELECT LPAD(nombre_alumno,30,’.’)
FROM NOTAS_ALUMNOS;
LPAD(NOMBRE_ALUMNO,30,'.')
------------------------------
......Alcalde García, M. Luisa
...........Benito Martín, Luis
........Casas Martínez, Manuel
.......Corregidor Sánchez, Ana
...........Díaz Sánchez, María
EJ 5: Ajustar a la decha rellenando por la izq con ceros: b7557 donde long.Total es
5 caracteres.
Select LPAD (‘757’, 5, and ’0’) FROM DUAL;
LPAD (
-----
0 757
//Esto no rellenaría con 0 el espacio que hay en ‘0 757’,
Para ello utilizaremos: RTRIM ó LTRIM
¨ RPAD -> RPAD(cad1,n[,lo mismo q LPAD pero rellenando por la derecha. Devuelve
cad1 con longitud <n> y ajustado a la izq.; <cad2> es la cadena a rellenar por la
derecha
[Escriba texto] Página 11
13. BASE DE DATOS II 12
EJ 6: Para cada empleado obtener el apellido ajustado a la izq. Y rellenado por la
derecha con asteriscos, obteniendo una long. Total de 11 caractes.
SELECT RPAD(apellido,11,’*’) FROM EMPLE;
RPAD(APELLI
-----------
SÁNCHEZ****
ARROYO*****
SALA*******
JIMÉNEZ**** [...]
· LTRIM(cad[,SET]) Devuelve <cad> con el grupo de carecteres SET omitidos por la
izq. De la cadena por defecto, si la cadena contiene blancos a la izq. Y se omite el
segundo parámetro SET, la fºn devuelve la cadena sin blancos a la izq. SET es la
cadena que no se van a mostrar, de izq. A drecha y mientras vaya encontrando
caracteres que contenga la cadena SET. ( Es decir se tendran en cuenta todas los
caracteres ddel SET indistintamente del orden).
EJ 7: Dada la cadena ‘ hola’ se pide devolver la misma cadena eliminando los
blancos de la izq.
SELECT LTRIM(‘ hola’) FROM DUAL;
LTRI
----
hola
EJ 7: Dada la cadena ‘abaAabUNIDAD’ se pide q con una sentencia LTRIM eliminar
los caracteres ‘a’ y ‘b’ por la izq. para q devuelva ‘AabUNIDAD’.
SELECT LTRIM(‘abaAabUNIDAD’,’aba’) FROM DUAL;
LTRIM ('AB
---------
AabUNIDAD
//se ha dejado ‘ab’ pero es porque va de izq. A dcha. Y ha encontrado ‘A’
que no está en la cadena SET.
¨ RTRIM(cad[,SET]) : Es lo mismo que RTRIM pero desde la derecha.
[Escriba texto] Página 12
14. BASE DE DATOS II 13
EJ 8: Eliminar los blancos de la cadena: ‘adios ‘.
SELECT RTRIM(‘adios ‘,’ ‘) FROM DUAL;
RTRIM
-----
adios
EJ 9: Quitar las comillas dobles de la izq. y las de la dcha. Junto con el punto de la
dcha. De la tabla MIS_TEXTOS.
SQL> SELECT * FROM MISTEXTOS;
TITULO AUTOR
METODOLOGÍA DE LA PROGRAMACIÓN. ALCALDE, GARCÍA
"INFORMÁTICA BÁSICA." GARCÍA GARCERÁN
SISTEMAS OPERATIVOS J.F. GARCÍA
SISTEMAS DIGITALES. M.A. RUÍZ
"MANUAL DE C." M.A. RUÍZ
SELECT RTRIM(LTRIM(titulo,’”’),’”.’)
FROM MISTEXTOS;
METODOLOGÍA DE LA PROGRAMACIÓN
INFORMÁTICA BÁSICA
SISTEMAS OPERATIVOS
SISTEMAS DIGITALES
MANUAL DE C
EJ 10: Dada la cadena ‘ 757 ‘, devolver la cadena ‘00000757’.
SELECT LPAD( LTRIM(RTRIM(‘ 757 ‘,’ ‘),’ ‘),8,’0’) FROM DUAL;
LPAD(LTR
--------
00000757
· REPLACE(cad,cadena_busqueda[,cadena_sustitucion]) Devuelve <cad> con cada
ocurrencia de cadena_busqueda sustituida por cadena_sustitución. Si no ponemos
nada en la cadena sustitucion, se sustituirá la cdena_busqueda por NADA.
[Escriba texto] Página 13
15. BASE DE DATOS II 14
EJ 11: Dada la cadena ‘BLANCO Y NEGRO’ obtener ‘BLANCAS Y NEGRAS’.
SELECT REPLACE(‘BLANCO Y NEGRO’,’O’,’AS’) from dual;
REPLACE('BLANCOY
----------------
BLANCAS Y NEGRAS
· SUBSTR(cad,inicio[,n]) Extrae una parte de una cadena (subcadena) ydevuelve la
subcadena de <cad> q abarca desde la posición indicada en <inicio> hasta tantos
caracteres como indique <n>. El valor de <n> no puede ser inferior a 1.
EJ 12: Partiendo de la cadena ‘ABCDEF’ obtener la cadena ’CD’.
SELECT SUBSTR(‘ABCDEF’,3,2) FROM DUAL;
EJ 13: Visualizar el apellido y la primera letra del mismo en minúsculas en
columnas diferentes de todos los empleados.
SELECT apellido “APE”,SUBSTR (apellido, 1,1)”P” FROM EMPLE;
APELLIDO S
-------------------
SÁNCHEZ S
ARROYO A
SALA S
JIMÉNEZ J
MARTÍN M
NEGRO N
CEREZO C
GIL G
REY R
TOVAR T
ALONSO A
JIMENO J
FERNÁNDEZ F
MUÑOZ M
· TRANSLATE (cad1,cad2,cad3) -> Devuelve <cad1> con los caracteres encontrados
en <cad2> y sustituidos por los caracteres de <cad3>.
[Escriba texto] Página 14
16. BASE DE DATOS II 15
EJ 14: SELECT TRANSLATE (‘LOS PILARES DE LA TIERRA’,’LAEIOU’,’laeiou’)
FROM DUAL;
TRANSLATE ('LOSPILARESDEL
------------------------------------------
loSPilaReS De la TieRRa
Ej 15: SELECT TRANSLATE(‘SQL PLUS’,’SQL’,’123’)
FROM DUAL;
TRANSLAT
--------
123 P3U1
EJ 16: De la tabla MISTEXTOS queremos visualizar todos los títulos sin los caracteres. “
SELECT TRANSLATE (titulo,’.”’,’ ‘) FROM MISTEXTOS;
Transtalate, para funcionar ha de tener al menos un carácter en <cad2>.
¨SOUNDEX
SELECT SOUNDEX(‘Smythe’) FROM DUAL;
SELECT SOUNDEX(‘Smith’) FROM DUAL;
[Escriba texto] Página 15
17. BASE DE DATOS II 16
4.2.3 Funciones Numéricas
ABS
Sintaxis
ABS(x)
Propósito
Devuelve el valor absoluto de x.
Ejemplo:
Select abs (7) from dual;
Resultado: 7
ASIN
Sintaxis
ASIN(x)
Propósito
Devuelve el arco seno de x. El rango de x debe estar entre -1 y 1.
Ejemplo:
Select asin(1) from dual;
Resultado: 1.57079633
FLOOR
Sintaxis
FLOOR(x)
Propósito
Devuelve el mayor entero igual o menor que x
Ejemplo:
Select floor(23.5) from dual;
Resultado: 23
[Escriba texto] Página 16
18. BASE DE DATOS II 17
4.2.4 Funciones fechas
Aquí algunos ejemplos para adicionar y sustraer días y meses y encontrar la diferencia
entre fechas en Oracle. Estos ejemplos toman el resultado de la tabla "dual. La tabla
Dual es una tabla virtual que existe en todas las Bases de datos Oracle. Muchas veces
hemos usado la consulta SELECT sysdate FROM dual; la cual simplemente nos retorna la
fecha y hora actual.
SYSDATE= Devuelve la fecha del sistema.
ADD_MONTHS (fecha, n)= Devuelve la fecha "fecha" incrementada en "n" meses.
LASTDAY (fecha)= Devuelve la fecha del último día del mes que contiene "fecha".
MONTHS_BETWEEN (fecha1, fecha2)= Devuelve la diferencia en meses entre las fechas
"fecha1" y "fecha2".
NEXT_DAY (fecha, cad)= Devuelve la fecha del primer día de la semana indicado por
"cad" después de la fecha indicada por "fecha".
Ajustar Días, Semanas, Horas y minutos
Para adicionar y sustraer días a una fecha, simplemente usamos los signos + o -
respectivamente.
Algunosejemplos:
SQL> SELECT sysdate + 7 FROM dual; SYSDATE+ ------- 25/09/06
SQL> SELECT sysdate - 30 FROM dual; SYSDATE- -------- 19/08/06
SQL> SELECT to_char(sysdate - 14, 'MM/DD/YYYY HH:MI AM') FROM
dual; TO_CHAR(SYSDATE-14, ------------------- 09/04/2006 11:41 AM
En el primer ejemplo, vemos que la consulta retorna la fecha siete días a partir de hoy.
La segunda retorna la fecha de hace 30 días. En la tercera, se ha usado la función de
conversión to_char, para ver las horas y minutos. Esto nos muestra que mientras la
fecha, ha cambiado, el tiempo no cambia. Los ejemplos primero y tercero además
muestran como el adicionar días, puede ser útil para computar semanas.
[Escriba texto] Página 17
19. BASE DE DATOS II 18
Si usted desea simplificar el computo de semanas, podías usar querys de este
tipo: SQL> SELECT sysdate + (7 * 3) FROM dual; SYSDATE+ -------- 09/10/06 Así
mismo, para trabajar con horas ud podría usar fracciones de día. La forma más simple
para mostrar esto es dividiendo por 24, que es el número de horas diarias.
Aunque el paréntesis no es necesario, permite evidenciar con más claridad la
sentencia Aquí, se muestra la hora actual y luego la hora actual mas dos horas: SQL>
SELECT to_char(sysdate, 'HH:MI AM') FROM dual; TO_CHAR( -------- 02:00 PM SQL>
SELECT to_char(sysdate + (2/24), 'HH:MI AM') FROM dual;
TO_CHAR( -------- 04:00 PM
Una alternativa a este método es el uso de la función numtodsinterval. El anterior
ejemplo puede ser reescrito de la siguiente manera (la función numtodsinterval viene
incorporada en la BD apartir de oracle 9i): SQL> SELECT to_char(sysdate +
numtodsinterval(2, 'HOUR'), 'HH:MI AM') FROM dual; TO_CHAR( --- 02:00 PM Aquí la
función numtodsinterval está haciendo el trabajo de dividir 2/24 horas. Las opciones
válidas para esta función son: ‘DAY’, ‘HOUR’, ‘MINUTE’, o ‘SECOND’. Aquí un ejemplo
usando ‘MINUTE’. Cuando se trabaja con minutos la función numtodsinterval es mucho
más legible. SQL> SELECT to_char(sysdate + numtodsinterval(45, 'MINUTE'), 'HH:MI
AM')FROM dual; TO_CHAR( -------- 03:19 PM
[Escriba texto] Página 18
20. BASE DE DATOS II 19
4.2.5 Funciones de Conversión
TO_CHAR= Transforma un tipo DATE ó NUMBER en una cadena de caracteres.
TO_CHAR
Sintaxis
TO_CHAR ( d[,formato[,paramnls]] )
Propósito
Convertir la fecha d a una cadena de caracteres VARCHAR2. El parámetro paramnls
controla el idioma de los componentes de mes y día de la cadena devuelta. El formato
de paramnls es:
'NLS _DATE_LANGUAGE=idioma'
Ejemplo:
selectto_char(sysdate,'dd/mm/yyyy')from dual;
Resultado: 19/03/2002
TO_DATE= Transforma un tipo NUMBER ó CHAR en DATE.
Sintaxis
TO_DATE (cadena [, formato [, paramnls]])
Propósito
Convierte una cadena CHAR o VARCHAR2 a una valor de fecha tipo DATE. El parámetro
formato es una cadena de formato fecha.
Ejemplo:
Select to_date(’19/03/2002’,’dd/mm/yyyy’) from dual;
Resultado: 19/03/2002
TO_NUMBER= Transforma una cadena de caracteres en NUMBER.
• Sintaxis
• TO_NUMBER ( cadena[,formato[,paramnls]] )
• Propósito
• Convierte la cadena CHAR o VARCHAR2 a un valor de tipo NUMBER.
[Escriba texto] Página 19
21. BASE DE DATOS II 20
• Ejemplo:
• select to number(’$123.45’,’$999.99’) from dual;
• Resultado: 123,45
Función Propósito
TO_CHAR(fecha,'formato') Esta función nos convierte una
fecha de tipo date a una fecha de
tipo varchar2
TO_CHAR(numero,'formato') Nos convierte un dato de tipo
number a un tipo varchar2
TO_DATE(cad,'formato') Convierte un tipo de dato
varchar2 o char a un valor de
tipo date con el formato
especificado
TO_NUMBER(cadena,['formato']) Convierte una cadena a tipo de
dato number, y si se le pasa, con
el formato especificado
[Escriba texto] Página 20
22. BASE DE DATOS II 21
4.2.6 OTRAS Funciones
GREATEST
Sintaxis
GREATEST ( expr1[,expr2].. )
Propósito
Devuelve la expresión con mayor valor de todos sus argumentos.
Ejemplo:
select greatest(10,’7’,’3’) from dual;
Resultado: 10
UID
Sintaxis
USER
Sintaxis
USER
Propósito
Devuelve un valor VARCHAR2 que contiene el nombre de usuario actual de Oracle.
Ejemplo:
selectuserfrom dual;
Resultado: CLOOAVALVERDE
Otras funciones
1) Mostramos el nombre de los alumnos y si su asignatura es lengua le ponemos un código 1, si es
matemáticas un código 2 y si no es ninguna de esas un 3.
Select alumnos, DECODE (asignatura, 'lenguaje',1, 'matemáticas', 2, 3) "código" from alumnos;
2) Mostramos el usuario que está conectado.
Show USER;
3) Mostramos el número de bytes que tiene la columna nombre de la tabla usuarios.
Selec t VSIZE(nombre) "tamaño", nombre from usuarios;
[Escriba texto] Página 21
23. BASE DE DATOS II 22
BIBLIOGRAFIA
LIBRO:
Korth, Henry, Silberschatz. “Fundamentos de Base de Datos”. Mc Graw
Hill, IV Edition 2002.
Kroenke, David M. “Procesamiento de Base de Datos”. Prentice May, V
edición, 1996.
PAGINAS WEB:
Nivaildo Polanco Martínez “Propuesta de un rediseño de base de datos en
postgresql” en:
http://www.monografias.com/trabajos91/propuesta-rediseno-base-
datos-postgresql/propuesta-rediseno-base-datos-postgresql.shtml
Chagra “Base de datos” en:
http://www.monografias.com/trabajos7/bada/bada.shtml
[Escriba texto] Página 22