Вы находитесь на странице: 1из 7

Unidad 2

Datos Tipo Fecha/Hora

[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

MySQL Intermedio
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 tradicionales 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 los 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 antiguos. 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.

MySQL es Software Libre

MySQL Intermedio
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 | +-----+-----+-----+------------+----------+

MySQL es Software Libre

MySQL Intermedio
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 consultaejemplo 2.3 nos explicar cmo especificar formatos alternos. El resto de los formatos se presentan en la Figura 2.2. CODIGO DE FORMATO ISO USA EUR JIS LOCAL Figura 2.2. FORMATO DE FECHA FORMATO DE HORA yyyy-mm-dd hh.mm.ss Mm/dd/yyyy hh:mm (AM o PM) dd.mm.yyyy hh.mm.ss yyyy-mm-dd hh:mrn:ss (formato especial definido para la instalacin) Opciones de formato fecha/hora.

MySQL es Software Libre

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 consultaejemplo demuestra el uso de funciones incorporadas para cumplir este objetivo.

MySQL Intermedio
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';

MySQL es Software Libre

MySQL Intermedio
+-----+-----+-----+----------+----------+ | 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. 2C. Obtener la fecha en la que el estudiante 800 se matricul en el curso C11. Usar el formato EUR. Obtener la fecha y la hora de todas las matrculas realizadas en el nmero de curso T11. Usar el formato JIS.

MySQL es Software Libre

Tabla 2.1 Especificador %a %b %c %D %d %e %f %H %h %I %i %j %k %l %M %m %p %r %S %s %T %U %u %V %v %W %w %x

Descripcin Da de semana abreviado (Sun..Sat) Mes abreviado (Jan..Dec) Mes, numrico (0..12) Da del mes con sufijo ingls (0th, 1st, 2nd, 3rd, ...) Da del mes numrico (00..31) Da del mes numrico (0..31) Microsegundos (000000..999999) Hora (00..23) Hora (01..12) Hora (01..12) Minutos, numrico (00..59) Da del ao (001..366) Hora (0..23) Hora (1..12) Nombre mes (January..December) Mes, numrico (00..12) AM o PM Hora, 12 horas (hh:mm:ss seguido de AM o PM) Segundos (00..59) Segundos (00..59) Hora, 24 horas (hh:mm:ss) Semana (00..53), donde domingo es el primer da de la semana Semana (00..53), donde lunes es el primer da de la semana Semana (01..53), donde domingo es el primer da de la semana; usado con %X Semana (01..53), donde lunes es el primer da de la semana; usado con %x Nombre da semana (Sunday..Saturday) Da de la semana (0=Sunday..6=Saturday) 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.


6

MySQL Intermedio
BIBLIOGRAFIAS 1. FUNDAMENTOS DE BASES DE DATOS. Abraham S. Henry F. Cuarta edicin. McGrawHill. 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.

MySQL es Software Libre

Вам также может понравиться