Sei sulla pagina 1di 7

[MySQL Intermedio]

De Intecap-TICS

[Esta Unidad trata los formatos bsicos relativo a Fechas y Horas que aparecen en los
campos de las tablas; los Objetivos de la Unidad son adquirir las competencias de los
siguientes contenidos.]













Unidad
2
Datos Tipo
Fecha/Hora


Unidad 2






























M
y
S
Q
L

e
s

S
o
f
t
w
a
r
e

L
i
b
r
e




2
M My yS SQ QL L I In nt te er rm me ed di io o

Procesamiento de informacin relativa a fecha y hora

Esta unidad presenta las utilidades especiales de SQL para el procesamiento de datos que
representan informacin de fechas y horas. En un curso bsico se presentan y destacan las
diferencias entre dos tipos de datos estndar numricos y caracteres. Los sistemas tradi cionales
de procesamiento de datos usan alguna forma de datos numricos caracteres para codificar la
fecha y la informacin horaria. Esto requiere que el usuario o algn programa de aplicaciones
realicen un esfuerzo extra para decodificar estos datos. Este mtodo tiene otro aspecto negativo,
la gran cantidad de formatos diferentes que existen para la informacin relativa a la fecha y a la
hora. En realidad, este mtodo a usaba en las primeras versiones del DB2 (Otro software de Base
de Datos). En la actualidad, el SQL tiene utilidades especiales para simplificar el almacenamiento
y el manejo de la informacin relativa a la fecha y a la hora. Mientras estas utilidades reducen el
esfuerzo requerido por la actividad de programacin en relacin con la informacin horaria y de
fecha, a lgica de estas tareas puede ser inherentemente compleja. Debido a esto, las utilidades
de SQL sobre fecha y hora son relativamente sofisticadas y complejas. Por este motivo este curso
slo tratar algunos de los conceptos y utilidades bsicas sobre el manejo de la informacin
relativa a la fecha y a la hora. Esta unidad restringir su atencin a la visualizacin de la
informacin horaria y de fecha que aparezca en alguna tabla.

TIPOS DE DATOS DE FECHA Y HORA

En las primeras unidades del curso bsico se representa la orden CREATE TABLE, en el que
observaremos cmo cada columna, en una tabla recin creada, es asignada a un tipo especfico de
datos. Veremos entonces que, adems de especificar las distintas variaciones de l os datos
numricos y en forma de caracteres descritos en las unidades anteriores, es posible especificar
que una columna dada slo puede contener valores referentes a la fecha y/o a la hora. Para
concretar, el SQL permite los tipos de datos fecha/hora anti guos. Estos son DATE, TIME y
TIMESTAMP que se describen en la Figura 2.1. Destacamos el hecho de que el sistema tiene su
propia representacin interna para estos tipos de datos; no necesariamente tienen que
afectarnos, porque estos cdigos se convertirn automticamente en cadenas de caracteres
cuando los visualicemos. Las siguientes consultas- ejemplo describirn una gran variedad de
formatos para estas cadenas de caracteres.

La disponibilidad de los tipos de datos antiguos para la informacin horaria y de fecha,
significa que tal informacin no necesita ser representada como valor en forma numrica o en
forma de cadena de caracteres. Tambin implica que el sistema reconoce una columna que
contenga datos fecha/hora y acepta ciertas operaciones que pueden realizarse con estos datos y
que resultan muy tiles. En efecto, los datos fecha/hora representan una tercera categora de
datos distintos de los numricos y de las cadenas de caracteres. Las funciones especiales
incorporadas, y otras utilidades de SQL presentadas en esta unidad, pueden referenciar
nicamente columnas que contengan fecha y/o hora. La tabla CURSO no tiene columnas con
informacin fecha/hora. Por este motivo, introducimos la tabla MATRICULA que tiene una columna
con valores relativos a la fecha y otra con valores horarios.

DATE: Un cdigo interno especial que representa una fecha como yyyymmdd

DATE: Un cdigo interno que representa una hora como hhmmss

TIMESTAMP: Un cdigo interno que representa una combinacin de fecha y hora como
yyyymmddhhmmss nnnnnn (nnnnnn = valor en microsegundos)

Figura 2.1. Tipos de datos de fecha/hora.
































M
y
S
Q
L

e
s

S
o
f
t
w
a
r
e

L
i
b
r
e




3
M My yS SQ QL L I In nt te er rm me ed di io o

TABLA MATRICULA

En nuestra supuesta base de datos, representamos un curso como una fila en la tabla CURSO.
Supongamos ahora que un estudiante, que se identifica mediante un nmero de estudiante
(SNO), puede realizar (cursar) cualquiera de estos cursos.

Debido a que un director de departamento puede elegir ofrecer mltiples secciones del
mismo curso, cada clase se identifica mediante una combinacin de su nmero de curso (CNO) y
un nmero de seccin (SEC). Los estudiantes pueden matricularse en una o ms clases,
ejecutando un programa de aplicacin que pide al estudiante que introduzca su nmero de
estudiante y los nmeros de curso o seccin de las clases a las que quiere asistir. El programa
usar esta informacin para actualizar la tabla MATRICULA. Insertar una fila para cada clase a la
que el estudiante quiera asistir. Para construir la tabla MATRICULA, considere la siguiente
informacin:

La tabla MATRICULA contiene las columnas siguientes:

CNO: Nmero de curso (una cadena de caracteres, longitud = 3)
SEC: Nmero de seccin (una cadena de caracteres, longitud = 2)
SNO: Nmero de estudiante (una cadena de caracteres, longitud = 3)
FEC_MATR: Fecha de matrcula (tipo de dato FECHA) [tipo de dato: DATE]
HORA_MAT: Hora de matrcula (tipo de dato HORA) [tipo de dato: TIME]

Esta tabla contiene una fila para cada clase a la que el estudiante espera asistir. Debido a
que algunas clases tienen un cupo limitado de alumnos, se aplica la regla de que el primero que
se matricula es el que consigue la plaza. Por lo tanto, el programa de aplicacin debe almacenar la
fecha y la hora en que el estudiante realice la matrcula por columnas. El proceso mediante el cual
el programa de aplicacin usa el SQL inmerso para insertar filas en la tabla MATRICULA se escapa
al objetivo de este curso y, por lo tanto, no va a ser tratado aqu. Supongamos que el programa
se ha ejecutado varias veces y que la tabla MATRICULA contiene ahora varias filas que nos
gustara examinar. Las siguientes consultas-ejemplo ilustran algunas de las utilidades de que
dispondremos para visualizar los datos fecha/hora.

Ejercicio

2A. Crear la tabla MATRICULA e insertar las siguientes filas (registros):

+-----+-----+-----+------------+----------+
| CNO | SEC | SNO | FEC_MATR | HORA_MAT |
+-----+-----+-----+------------+----------+
| C11 | 01 | 325 | 2012-01-04 | 09:41:30 |
| C11 | 01 | 800 | 2012-12-15 | 11:49:00 |
| C11 | 02 | 100 | 2012-12-17 | 09:32:00 |
| C11 | 02 | 150 | 2012-12-17 | 09:32:30 |
| P33 | 01 | 100 | 2012-12-23 | 11:30:00 |
| P33 | 01 | 800 | 2012-12-23 | 11:23:00 |
| T11 | 01 | 100 | 2012-12-23 | 11:21:00 |
| T11 | 01 | 150 | 2012-12-15 | 11:35:30 |
| T11 | 01 | 800 | 2012-12-15 | 14:00:00 |
+-----+-----+-----+------------+----------+



































M
y
S
Q
L

e
s

S
o
f
t
w
a
r
e

L
i
b
r
e




4
M My yS SQ QL L I In nt te er rm me ed di io o

VISUALIZACION DE DATOS FECHA/HORA

Hemos afirmado anteriormente que la informacin relativa a la fecha y a la hora tiene una
representacin interna de los datos. Sin embargo, siempre que tal informacin sea visualizada,
observaremos que los valores fecha/hora aparecen como simples cadenas de caracteres. Esto se
debe a que el sistema convertir, automticamente, el cdigo interno fecha/hora en cadena de
caracteres antes de que sea visualizado. La primera consulta-ejemplo nos permitir obtener los
valores FEC_MATR y HORA_MAT, que aparecern como simples cadenas de caracteres.

Consulta-ejemplo 2.1: Obtener toda la informacin disponible en la tabla MATRICULA.

mysql> SELECT *
-> FROM MATRICULA;

+-----+-----+-----+------------+----------+
| CNO | SEC | SNO | FEC_MATR | HORA_MAT |
+-----+-----+-----+------------+----------+
| C11 | 01 | 325 | 2012-01-04 | 09:41:30 |
| C11 | 01 | 800 | 2012-12-15 | 11:49:00 |
| C11 | 02 | 100 | 2012-12-17 | 09:32:00 |
| C11 | 02 | 150 | 2012-12-17 | 09:32:30 |
| P33 | 01 | 100 | 2012-12-23 | 11:30:00 |
| P33 | 01 | 800 | 2012-12-23 | 11:23:00 |
| T11 | 01 | 100 | 2012-12-23 | 11:21:00 |
| T11 | 01 | 150 | 2012-12-15 | 11:35:30 |
| T11 | 01 | 800 | 2012-12-15 | 14:00:00 |
+-----+-----+-----+------------+----------+

Comentarios

1. Observar las columnas FEC_MATR y HORA_MAT. Los valores visualizados aparecern como
datos en forma de cadena de caracteres, con un formato acorde con la Organizacin
Internacional de Normalizacin (ISO). Este formato es aaaa-mm-dd (ao-mes-da) para la
fecha, y hh.mm.ss (horas- minutos-segundos) para la hora. Notemos que la representacin
interna de los valores fecha/hora es una notacin especial que es diferente de la cadena de
caracteres visualizada. La eleccin del formato ISO la realiza el administrador del sistema. Es
posible visualizar valores fecha/hora usando formatos distintos al formato ISO. La consulta-
ejemplo 2.3 nos explicar cmo especificar formatos alternos. El resto de los formatos se
presentan en la Figura 2.2.

CODIGO DE FORMATO FORMATO DE FECHA FORMATO DE HORA
ISO yyyy-mm-dd hh.mm.ss
USA Mm/dd/yyyy hh:mm (AM o PM)
EUR dd.mm.yyyy hh.mm.ss
JIS yyyy-mm-dd hh:mrn:ss
LOCAL (formato especial definido para la instalacin)
Figura 2.2. Opciones de formato fecha/hora.

2. Es posible visualizar slo algunos de los componentes del valor fecha (el ao, el mes o el da)
y de los componentes del valor hora (hora, minutos o segundos). La siguiente consulta-
ejemplo demuestra el uso de funciones incorporadas para cumplir este objetivo.


































M
y
S
Q
L

e
s

S
o
f
t
w
a
r
e

L
i
b
r
e




5
M My yS SQ QL L I In nt te er rm me ed di io o

ALGUNAS FUNCIONES INCORPORADAS DE FECHA/HORA

El SQL tiene funciones escalares incorporadas que pueden usarse para extraer componentes
individuales de los valores fecha/hora. Las funciones YEAR, MONTH y DAY aceptan un dato o valor
timestamp como argumento y devuelven el valor ao, mes o da apropiado. Las funciones HOUR,
MINUTE y SECOND aceptan un valor horario o timestamp, y producen el valor hora, minuto o
segundo adecuado. Finalmente, la funcin MICROSECOND acepta un valor timestamp como
argumento y devuelve el componente del timestamp como resultado. El siguiente ejemplo ilustra
el uso de algunas de estas funciones.

Consulta-ejemplo 2.2: Obtener el mes, da, hora y minuto en que el alumno identificado por el
nmero de estudiante 150 se matricul en la seccin 02 del curso C11.

mysql> SELECT MONTH(FEC_MATR), DAY(FEC_MATR),
-> HOUR(HORA_MAT), MINUTE(HORA_MAT)
-> FROM MATRICULA
-> WHERE SNO = '150'
-> AND CNO = 'C11'
-> AND SEC = '02';

+-----------------+---------------+----------------+------------------+
| MONTH(FEC_MATR) | DAY(FEC_MATR) | HOUR(HORA_MAT) | MINUTE(HORA_MAT) |
+-----------------+---------------+----------------+------------------+
| 12 | 17 | 9 | 32 |
+-----------------+---------------+----------------+------------------+

Comentario

Estas funciones cumplen las reglas sintcticas estndar y el comportamiento de las funciones
escalares, tal y como describimos en la unidad anterior. Cada funcin devuelve, en realidad, un
valor entero numrico. Esto significa que cualquiera de las funciones podra incluirse dentro de
una expresin aritmtica [ejemplo: SELECT DAY (FEC_MATR) + 10...].

FORMATOS DE FECHA Y HORA

Como ya se ha mencionado, el formato ISO para fecha hora no es el nico disponible. La Figura
2.2 resume los distintos formatos que se pueden usar para presentar la informacin fecha/hora.
Cuando se presenta esta informacin, se puede especificar el formato deseado usando la funcin
incorporada _FORMAT. Esta funcin acepta un valor fecha/hora como el primer argumento, y
cualquiera de los cdigos de formato que aparecen en la Tabla 2.1 como segundo argumento.
Devuelve el valor fecha/hora como una cadena de caracteres en el formato especificado.

Consulta-ejemplo 2.3: Obtener toda la informacin disponible en la tabla MATRICULA que tenga
un valor SNO de 100. Presentar la fecha y la hora usando el formato USA.

mysql> SELECT CNO, SEC, SNO,
-> DATE_FORMAT(FEC_MATR, '%d/%m/%y') AS FECHA,
-> TIME_FORMAT(HORA_MAT, '%H.%i.%S') AS HORA
-> FROM MATRICULA
-> WHERE SNO = '100';




































M
y
S
Q
L

e
s

S
o
f
t
w
a
r
e

L
i
b
r
e




6
M My yS SQ QL L I In nt te er rm me ed di io o

+-----+-----+-----+----------+----------+
| CNO | SEC | SNO | FECHA | HORA |
+-----+-----+-----+----------+----------+
| C11 | 02 | 100 | 17/12/12 | 09.32.00 |
| P33 | 01 | 100 | 23/12/12 | 11.30.00 |
| T11 | 01 | 100 | 23/12/12 | 11.21.00 |
+-----+-----+-----+----------+----------+
Comentario

Las funciones DATE_FORMAT Y TIME_FORMAT se utilizan para todos los formatos.

Ejercicios

2B. Obtener la fecha en la que el estudiante 800 se matricul en el curso C11. Usar el formato
EUR.

2C. Obtener la fecha y la hora de todas las matrculas realizadas en el nmero de curso T11.
Usar el formato JIS.

Tabla 2.1
Especificador Descripcin
%a Da de semana abreviado (Sun..Sat)
%b Mes abreviado (Jan..Dec)
%c Mes, numrico (0..12)
%D Da del mes con sufijo ingls (0th, 1st, 2nd, 3rd, ...)
%d Da del mes numrico (00..31)
%e Da del mes numrico (0..31)
%f Microsegundos (000000..999999)
%H Hora (00..23)
%h Hora (01..12)
%I Hora (01..12)
%i Minutos, numrico (00..59)
%j Da del ao (001..366)
%k Hora (0..23)
%l Hora (1..12)
%M Nombre mes (January..December)
%m Mes, numrico (00..12)
%p AM o PM
%r Hora, 12 horas (hh:mm:ss seguido de AM o PM)
%S Segundos (00..59)
%s Segundos (00..59)
%T Hora, 24 horas (hh:mm:ss)
%U Semana (00..53), donde domingo es el primer da de la semana
%u Semana (00..53), donde lunes es el primer da de la semana
%V Semana (01..53), donde domingo es el primer da de la semana; usado con %X
%v Semana (01..53), donde lunes es el primer da de la semana; usado con %x
%W Nombre da semana (Sunday..Saturday)
%w Da de la semana (0=Sunday..6=Saturday)
%x Ao para la semana, donde lunes es el primer da de la semana, numrico,
cuatro dgitos; usado con %v

Todos los otros caracteres se copian al resultado sin interpretacin.






























M
y
S
Q
L

e
s

S
o
f
t
w
a
r
e

L
i
b
r
e




7
M My yS SQ QL L I In nt te er rm me ed di io o

BIBLIOGRAFIAS

1. FUNDAMENTOS DE BASES DE DATOS. Abraham S. Henry F. Cuarta edicin. McGraw-
Hill. Mxico. 2008.

2. Beginning Oracle SQL. Oracle Lex de Haan Et.Al Apress. USA. 2009.

3. http://dev.mysql.com/doc/refman/5.6/en/ MySQL 5.6 Reference Manual.

Potrebbero piacerti anche