Usos de los diferentes formatos de FECHA:

Anuncio
Usos de los diferentes formatos de FECHA:
El tipo de dato DATE MySQL lo almacena con el siguiente formato: YYYY-MM-DD. Si defines una tabla con una
columna DATE puedes hacer los INSERTs flexibles pero al momento de almacenarse MySQL lo hacen con el
formato YYYY-MM-DD. Me explico con un ejemplo:
CREATE TABLE `mytabla` (
`id` int(11) NOT NULL auto_increment,
`fecha` date default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;
INSERT INTO mytabla (fecha) VALUES ('03-05-21'), ('04.05.21'),
('05/05/21'), ('06@05@21'), (NOW());
SELECT * FROM mytabla;
Resultado:
id
-----1
2
3
4
5
fecha
---------2003-05-21
2004-05-21
2005-05-21
2006-05-21
2007-05-21
El formato de las cadenas al momento de hacer los INSERTs como puedes ver es flexible ('03-05-21', '04.05.21', etc.)
pero al verificar la tabla podemos ver que el formato es igual para todas las tuplas (YYYY-MM-DD).
Si deseas almacenar fechas con otro formato veo como opción hacerlo en una columna de tipo CHAR o VARCHAR
pero al momento de hacer comparaciones u operaciones con esas columnas deberás convertirlas a tipo DATE en caso
contrario tendrás resultado errados. Me explico con un ejemplo:
CREATE TABLE `mytabla` (
`id` int(11) NOT NULL auto_increment,
`fecha` varchar(10) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;
INSERT INTO mytabla (fecha) VALUES ('21/05/03'), ('21/05/04'),
('21/05/05'), ('21/05/06'), ('21/05/07');
SELECT * FROM mytabla;
Resultado:
id
-----1
2
3
4
5
fecha
-------21/05/03
21/05/04
21/05/05
21/05/06
21/05/07
Hasta este momento quizás tienes lo que necesitas ("almacenar los datos de la misma manera que se despliegan en las
aplicaciones") pero si necesitas hacer una operación, como por ejemplo, seleccionar todas las tuplas con fecha mayor
al 20 de mayo de 2005, haces:
SELECT * FROM mytabla WHERE fecha > '20/05/05';
Obtendrás como resultado:
id
-----1
2
3
4
5
fecha
-------21/05/03
21/05/04
21/05/05
21/05/06
21/05/07
Ya que en realidad estás comparando cadenas, y el resultado no es lo que se necesita. En este caso tendrías que usar
la función STR_TO_DATE para obtener el resultado que necesitamos.
SELECT * FROM mytabla WHERE STR_TO_DATE(fecha, '%d/%m/%y') >
STR_TO_DATE('20/05/05', '%d/%m/%y');
Resultado:
id
-----3
4
5
fecha
-------21/05/05
21/05/06
21/05/07
Sin embargo, mi recomendación es almacenar las fechas con su tipo de datos DATE para facilitar todas las
operaciones con estas columnas y usar la función DATE_FORMAT para representar la fecha con el formato que
necesitemos. Ejemplo:
CREATE TABLE `mytabla` (
`id` int(11) NOT NULL auto_increment,
`fecha` date default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;
INSERT INTO mytabla (fecha) VALUES ('03-05-21'), ('04.05.21'),
('05/05/21'), ('06@05@21'), (NOW());
SELECT * FROM mytabla;
Resultado:
id
-----1
2
3
4
5
fecha
---------2003-05-21
2004-05-21
2005-05-21
2006-05-21
2007-05-21
Al aplicar la función tenemos:
SELECT id, DATE_FORMAT(fecha, '%d/%m/%y') AS fecha FROM mytabla;
Resultado:
id
-----1
2
3
4
5
fecha
-------21/05/03
21/05/04
21/05/05
21/05/06
21/05/07
.5. Funciones de fecha y hora
Esta sección describe las funciones que pueden usarse para manipular valores
temporales. Consulte Sección 11.3, “Tipos de fecha y hora” para una descripción del rango
de los valores que tiene cada fecha y hora y los formatos válidos en que se puedene
especificar los valores.
Aquí hay un ejemplo que usa funciones de fecha. La siguiente consulta selecciona todos
los registros con un valor date_col dentro de los últimos 30 días:
mysql> SELECT something FROM tbl_name
-> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;
Tenga en cuenta que la consulta también selecciona registros con fechas futuras.
Las funciones que esperan valores de fecha usualmente aceptan valores de fecha y hora e
ignoran la parte de hora. Las funciones que esperan valores de hora usualmente aceptan
valores de fecha y hora e ignoran la parte de fecha.
Las funciones que retornan la fecha u hora actuales se evalúan sólo una vez por consulta
al principio de la ejecución de consulta. Esto significa que las referencias múltiples a una
función tales como NOW() en una misma consulta siempre producen el mismo resultado.
Este principio también se aplica a CURDATE(), CURTIME(), UTC_DATE(), UTC_TIME(),
UTC_TIMESTAMP(), y a cualquiera de sus sinónimos.
En MySQL 5.0, las funciones CURRENT_TIMESTAMP(), CURRENT_TIME(),
CURRENT_DATE(), y FROM_UNIXTIME() retornan valores en la zona horaria de la
conexión, que está disponible como valor de la variable de sistema time_zone . Además,
UNIX_TIMESTAMP() asume que su argumento es un valor de fecha y hora en la zona
horaria actual. Consulte Sección 5.9.8, “Soporte de zonas horarias en el servidor MySQL”.
Los rango de retorno en las siguientes descripciones de funciones se aplican en fechas
completas. Si la fecha es un valor “cero” o una fecha incompleta como '2001-11-00', las
funciones que extraen una parte de la fecha pueden retornar 0. Por ejemplo
DAYOFMONTH('2001-11-00') retorna 0.

ADDDATE(date,INTERVAL expr type), ADDDATE(expr,days)
Cuando se invoca con la forma INTERVAL del segundo argumento, ADDDATE() es
sinónimo de DATE_ADD(). La función relacionada SUBDATE() es sinónimo de
DATE_SUB(). Para información del argumento INTERVAL , consulte la discusión de
DATE_ADD().
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
Si el argumento days es simplemente un valor entero, entonces MySQL 5.0 lo trata
como el número de días a añadir a expr.
mysql> SELECT ADDDATE('1998-01-02', 31);
-> '1998-02-02'

ADDTIME(expr,expr2)
ADDTIME() añade expr2 a expr y retorna el resultado. expr es una expresión de
fecha u hora y fecha, y expr2 es una expresión temporal.
mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999',
->
'1 1:1:1.000002');
-> '1998-01-02 01:01:01.000001'
mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');
-> '03:00:01.999997'

CONVERT_TZ(dt,from_tz,to_tz)
CONVERT_TZ() convierte un valor datetime dt de la zona horaria dada por
from_tz a la zona horaria dada por to_tz y retorna el valor resultante. Las zonas
horarias pueden especificarse como se describe en Sección 5.9.8, “Soporte de
zonas horarias en el servidor MySQL”. Esta función retorna NULL si los argumentos
son inválidos.
Si el valor se sale del rango soportado por el tipo TIMESTAMP al convertirse de
from_tz a UTC, no se realiza ninguna conversión. El rango TIMESTAMP se
describe en Sección 11.1.2, “Panorámica de tipos de fechas y hora”.
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
-> '2004-01-01 13:00:00'
mysql> SELECT CONVERT_TZ('2004-01-01
12:00:00','+00:00','+10:00');
-> '2004-01-01 22:00:00'
Nota: Para usar zonas horarias con nombres tales como 'MET' o
'Europe/Moscow', las tabas de zona horaria deben estar actualizadas
correctamente. Consulte Sección 5.9.8, “Soporte de zonas horarias en el servidor
MySQL” para instrucciones.

CURDATE()
Retorna la fecha horaria como valor en formato 'YYYY-MM-DD' o YYYYMMDD,
dependiendo de si la fucnión se usa en un contexto numérico o de cadena de
caracteres.
mysql> SELECT CURDATE();
-> '1997-12-15'
mysql> SELECT CURDATE() + 0;
-> 19971215

CURRENT_DATE, CURRENT_DATE()
CURRENT_DATE y CURRENT_DATE() son sinónimos de CURDATE().

CURTIME()
Retorna la hora actual como valor en formato 'HH:MM:SS' o HHMMSS dependiendo
de si la fucnión se usa en un contexto numérico o de cadena de caracteres.
mysql> SELECT CURTIME();
-> '23:50:26'
mysql> SELECT CURTIME() + 0;
-> 235026

CURRENT_TIME, CURRENT_TIME()
CURRENT_TIME y CURRENT_TIME() son sinónimos de CURTIME().

CURRENT_TIMESTAMP, CURRENT_TIMESTAMP()
CURRENT_TIMESTAMP() son sinónimos de NOW().

DATE(expr)
Extrae la parte de fecha de la expresión de fecha o fecha y hora expr.
mysql> SELECT DATE('2003-12-31 01:02:03');
-> '2003-12-31'

DATEDIFF(expr,expr2)
DATEDIFF() retorna el número de días entre la fecha inicial expr y la fecha final
expr2. expr y expr2 son expresiones de fecha o de fecha y hora. Sólo las partes
de fecha de los valores se usan en los cálculos.
mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
-> 1
mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');
-> -31

DATE_ADD(date,INTERVAL expr type), DATE_SUB(date,INTERVAL expr
type)
Estas funciones realizan operaciones aritméticas de fechas. date es un valor
DATETIME o DATE especificando la fecha de inicio. expr es una expresión que
especifica el intervalo a añadir o borrar de la fecha de inicio. expr es una cadena;
puede comenzar con un '-' para intervalos negativos. type es una palabra clave
que indica cómo debe interpretarse la expresión.
La palabra clave INTERVAL y el especificador type no son sensibles a
mayúsculas.
La siguiente tabla muestra cómo se relacionan los argumentos type y expr :
type Value
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
Expected expr Format
MICROSECONDS
SECONDS
MINUTES
HOURS
DAYS
WEEKS
MONTHS
QUARTERS
YEARS
'SECONDS.MICROSECONDS'
'MINUTES.MICROSECONDS'
'MINUTES:SECONDS'
'HOURS.MICROSECONDS'
'HOURS:MINUTES:SECONDS'
'HOURS:MINUTES'
'DAYS.MICROSECONDS'
'DAYS HOURS:MINUTES:SECONDS'
'DAYS HOURS:MINUTES'
'DAYS HOURS'
'YEARS-MONTHS'
Los valores QUARTER y WEEK están disponibles a partir de MySQL 5.0.0.
MySQL permite cualquier delimitador en el formato expr . Los mostrados en la
tabla son sugerencias. Si el argumento date es un valora DATE y sus cálculos
involucarán sólo partes YEAR, MONTH, y DAY (esto es, sin partes de hora), el
resultado es un valor DATE . De otro modo, el resultado es un valor DATETIME .
INTERVAL expr type se permite en cualquier lado del operador + si la expresión
en el otro lado es una fecha o fecha y hora. Para el operador - , INTERVAL expr
type se permite sólo en la parte derecha, ya que no tiene sentido restar una fecha
de un intervalo. (Consulte los ejemplos a continuación.)
mysql> SELECT '1997-12-31 23:59:59' + INTERVAL 1 SECOND;
-> '1998-01-01 00:00:00'
mysql> SELECT INTERVAL 1 DAY + '1997-12-31';
-> '1998-01-01'
mysql> SELECT '1998-01-01' - INTERVAL 1 SECOND;
-> '1997-12-31 23:59:59'
mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
->
INTERVAL 1 SECOND);
-> '1998-01-01 00:00:00'
mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
->
INTERVAL 1 DAY);
-> '1998-01-01 23:59:59'
mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
->
INTERVAL '1:1' MINUTE_SECOND);
-> '1998-01-01 00:01:00'
mysql> SELECT DATE_SUB('1998-01-01 00:00:00',
->
INTERVAL '1 1:1:1' DAY_SECOND);
-> '1997-12-30 22:58:59'
mysql> SELECT DATE_ADD('1998-01-01 00:00:00',
->
INTERVAL '-1 10' DAY_HOUR);
-> '1997-12-30 14:00:00'
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02'
mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002',
->
INTERVAL '1.999999' SECOND_MICROSECOND);
-> '1993-01-01 00:00:01.000001'
Si especifica un intervalo demasiado pequeño (no incluye todas las partes de
intervalo que se esperarían de la palabra clave type ), MySQL asume que ha
dejado la parte más a la izquierda del valor del intervalo. Por ejemplo, si especifica
un type de DAY_SECOND, se espera que el valor de expr tenga días, horas,
minutos y segundos. Si especifica un valor como '1:10', MySQL asume que las
partes de día y hora no se encuentran disponibles y que el valor representa
minutos y segundos. En otras palabras, '1:10' DAY_SECOND se interpreta de
forma que es equivalente a '1:10' MINUTE_SECOND. Esto es análogo a la forma
en que MySQL interpreta valores TIME como representando tiempo transcurrido en
lugar de la hora del día.
Si suma o borra de un valor de fecha algo que contenga una parte de fora, el
resultado se convierte automáticamente a valor fecha/hora:
mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 DAY);
-> '1999-01-02'
mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);
-> '1999-01-01 01:00:00'
Si usa fechas muy mal formadas, el resultado es NULL. Si suma MONTH,
YEAR_MONTH, o YEAR y la fecha resultante tiene un día mayor que el día máximo
para el nuevo mes, el día se ajusta al número máximo del nuevo mes:
mysql> SELECT DATE_ADD('1998-01-30', INTERVAL 1 MONTH);
-> '1998-02-28'

DATE_FORMAT(date,format)
Formatea el valor date según la cadena format . Los siguientes especificadores
pueden usarse en la cadena format :
Especificador
%a
Descripción
%b
Mes abreviado (Jan..Dec)
%c
Mes, numérico (0..12)
%D
Día del mes con sufijo inglés (0th, 1st, 2nd, 3rd, ...)
%d
Día del mes numérico (00..31)
%e
Día del mes numérico (0..31)
%f
Microsegundos (000000..999999)
%H
Hora (00..23)
%h
Hora (01..12)
%I
Hora (01..12)
%i
Minutos, numérico (00..59)
%j
Día del año (001..366)
%k
Hora (0..23)
%l
Hora (1..12)
%M
Nombre mes (January..December)
%m
Mes, numérico (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 día de la
semana
%u
Semana (00..53), donde lunes es el primer día de la
semana
%V
Semana (01..53), donde domingo es el primer día de la
semana; usado con %X
%v
Semana (01..53), donde lunes es el primer día de la
semana; usado con %x
Día de semana abreviado (Sun..Sat)
%W
Nombre día semana (Sunday..Saturday)
%w
Día de la semana (0=Sunday..6=Saturday)
%X
Año para la semana donde domingo es el primer día de la
semana, numérico, cuatro dígitos; usado con %V
%x
Año para la semana, donde lunes es el primer día de la
semana, numérico, cuatro dígitos; usado con %v
%Y
Año, numérico, cuatro dígitos
%y
Año, numérico (dos dígitos)
%%
Carácter '%' literal
Todos los otros caracteres se copian al resultado sin interpretación.
Tenga en cuenta que el carácter '%' se necesita antes de caracteres
especificadores de formato.
Los rangos para los especificadores de mes y día comienzan en cero debido a que
MySQL permite almacenar fechas incompletas tales como '2004-00-00'.
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',
'%D %y %a %d %m %b %j');
-> '4th 97 Sat 04 10 Oct 277'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',
'%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
-> '1998 52'

DAY(date)
DAY() es sinónimo de DAYOFMONTH().

DAYNAME(date)
Retorna el nombre del día de la semana para date.
mysql> SELECT DAYNAME('1998-02-05');
-> 'Thursday'

DAYOFMONTH(date)
Retorna el día del mes para date, en el rango 1 a 31.
mysql> SELECT DAYOFMONTH('1998-02-03');
-> 3

DAYOFWEEK(date)
Retorna el índice del día de la semana para date (1 = domingo, 2 = lunes, ..., 7 =
sábado). Estos valores del índice se corresponden con el estándar ODBC.
mysql> SELECT DAYOFWEEK('1998-02-03');
-> 3

DAYOFYEAR(date)
Retorna el día del año para date, en el rango 1 a 366.
mysql> SELECT DAYOFYEAR('1998-02-03');
-> 34

EXTRACT(type FROM date)
La función EXTRACT() usa la misma clase de especificadores de tipo que
DATE_ADD() o DATE_SUB(), pero extrae partes de la fecha en lugar de realizar
aritmética de fecha.
mysql> SELECT EXTRACT(YEAR FROM '1999-07-02');
-> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03');
-> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM '1999-07-02 01:02:03');
-> 20102
mysql> SELECT EXTRACT(MICROSECOND
->
FROM '2003-01-02 10:30:00.000123');
-> 123

FROM_DAYS(N)
Dado un número de día N, retorna un valor DATE .
mysql> SELECT FROM_DAYS(729669);
-> '1997-10-07'
Use FROM_DAYS() con precaución en fechas viejas. No se pretende que se use
con valores que precedan el calendario Gregoriano (1582). Consulte Sección 12.6,
“Qué calendario utiliza MySQL”.

FROM_UNIXTIME(unix_timestamp) , FROM_UNIXTIME(unix_timestamp,format)
Retorna una representación del argumento unix_timestamp como un valor en
formato 'YYYY-MM-DD HH:MM:SS' o YYYYMMDDHHMMSS , dependiendo de si la
función se usa en un formato numérico o de cadena de caracteres.
mysql> SELECT FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> SELECT FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
Si se da format, el resultado se formatea según la cadena format. format puede
contener los mismos especificadores que los listados en la entrada para la función
DATE_FORMAT() .
mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),
->

'%Y %D %M %h:%i:%s %x');
-> '2003 6th August 06:22:58 2003'
GET_FORMAT(DATE|TIME|DATETIME,
'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL')
Retorna una cadena de formato. Esta función es útil en combinación con las
funciones DATE_FORMAT() y STR_TO_DATE() .
Los tres valores posibles para el primer argumento y los cinco posibles valores
para el segundo argumento resultan en 15 posibles cadenas de formato (para los
especificadores usados, consulte la tabla en la descripción de la función
DATE_FORMAT() ).
LLamad a función
GET_FORMAT(DATE,'USA')
GET_FORMAT(DATE,'JIS')
GET_FORMAT(DATE,'ISO')
GET_FORMAT(DATE,'EUR')
GET_FORMAT(DATE,'INTERNAL')
GET_FORMAT(DATETIME,'USA')
GET_FORMAT(DATETIME,'JIS')
GET_FORMAT(DATETIME,'ISO')
GET_FORMAT(DATETIME,'EUR')
GET_FORMAT(DATETIME,'INTERNAL')
GET_FORMAT(TIME,'USA')
GET_FORMAT(TIME,'JIS')
GET_FORMAT(TIME,'ISO')
GET_FORMAT(TIME,'EUR')
GET_FORMAT(TIME,'INTERNAL')
Resultado
'%m.%d.%Y'
'%Y-%m-%d'
'%Y-%m-%d'
'%d.%m.%Y'
'%Y%m%d'
'%Y-%m-%d-%H.%i.%s'
'%Y-%m-%d %H:%i:%s'
'%Y-%m-%d %H:%i:%s'
'%Y-%m-%d-%H.%i.%s'
'%Y%m%d%H%i%s'
'%h:%i:%s %p'
'%H:%i:%s'
'%H:%i:%s'
'%H.%i.%S'
'%H%i%s'
El formato ISO es ISO 9075, no ISO 8601.
En MySQL 5.0, TIMESTAMP puede usarse; GET_FORMAT() retorna los mismos
valores que para DATETIME.
mysql> SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));
-> '03.10.2003'
mysql> SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA'));
-> '2003-10-31'
Consulte Sección 13.5.3, “Sintaxis de SET”.

HOUR(time)
Retorna la hora para time. El rango del valor de retorno es 0 a 23 para valores de
horas del día.
mysql> SELECT HOUR('10:05:03');
-> 10
Además, el rango de los valores TIME es mucho mayor, así que HOUR puede
retornar valores mayores que 23.
mysql> SELECT HOUR('272:59:59');
-> 272

LAST_DAY(date)
Toma una fecha o fecha/hora y retorna el valor correspondiente para el último día
del mes. Retorna NULL si el argumento es inválido.
mysql> SELECT LAST_DAY('2003-02-05');
-> '2003-02-28'
mysql> SELECT LAST_DAY('2004-02-05');
-> '2004-02-29'
mysql> SELECT LAST_DAY('2004-01-01 01:01:01');
-> '2004-01-31'
mysql> SELECT LAST_DAY('2003-03-32');
-> NULL

LOCALTIME, LOCALTIME()
LOCALTIME y LOCALTIME() son sinónimos de NOW().

LOCALTIMESTAMP, LOCALTIMESTAMP()
LOCALTIMESTAMP y LOCALTIMESTAMP() son sinónimos de NOW().

MAKEDATE(year,dayofyear)
Retorna una fecha, dado un año y día del año. dayofyear debe ser mayor a 0 o el
resultado es NULL.
mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);
-> '2001-01-31', '2001-02-01'
mysql> SELECT MAKEDATE(2001,365), MAKEDATE(2004,365);
-> '2001-12-31', '2004-12-30'
mysql> SELECT MAKEDATE(2001,0);
-> NULL

MAKETIME(hour,minute,second)
Retorna un valor horario calculado a partir de los argumentos hour, minute, y
second .
mysql> SELECT MAKETIME(12,15,30);
-> '12:15:30'

MICROSECOND(expr)
Retorna los microsegundos a partir del a expresión de hora o fecha/hora expr
como número en el rango de 0 a 999999.
mysql> SELECT MICROSECOND('12:00:00.123456');
-> 123456
mysql> SELECT MICROSECOND('1997-12-31 23:59:59.000010');
-> 10

MINUTE(time)
Retorna el minuto de time, en el rango 0 a 59.
mysql> SELECT MINUTE('98-02-03 10:05:03');
-> 5

MONTH(date)
Retorna el mes para date, en el rango 1 a 12.
mysql> SELECT MONTH('1998-02-03');
-> 2

MONTHNAME(date)
Retorna el nombre completo del mes para date.
mysql> SELECT MONTHNAME('1998-02-05');
-> 'February'

NOW()
Retorna la fecha y hora actual como valor en formato 'YYYY-MM-DD HH:MM:SS' o
YYYYMMDDHHMMSS , dependiendo de si la función se usa en contexto numérico o de
cadena de caracteres.
mysql> SELECT NOW();
-> '1997-12-15 23:50:26'
mysql> SELECT NOW() + 0;
-> 19971215235026

PERIOD_ADD(P,N)
Añade N meses al periodo P (en el formato YYMM o YYYYMM). Retorna un valor en el
formato YYYYMM. Tenga en cuenta que el argumento del periodo P no es una fecha.
mysql> SELECT PERIOD_ADD(9801,2);
-> 199803

PERIOD_DIFF(P1,P2)
Retorna el número de meses entre periodos P1 y P2. P1 y P2 deben estar en el
formato YYMM o YYYYMM. Tenga en cuenta que los argumentos del periodo P1 y P2
no son fechas.
mysql> SELECT PERIOD_DIFF(9802,199703);
-> 11

QUARTER(date)
Retorna el cuarto del año para date, en el rango 1 a 4.
mysql> SELECT QUARTER('98-04-01');
-> 2

SECOND(time)
Retorna el segundo para time, en el rango 0 a 59.
mysql> SELECT SECOND('10:05:03');
-> 3

SEC_TO_TIME(seconds)
Retorna el argumento seconds , convertido a horas, minutos y segundos, como un
valor en formato 'HH:MM:SS' o HHMMSS, dependiendo de si la función se usa en
contexto numérico o de cadena de caracteres.
mysql> SELECT SEC_TO_TIME(2378);
-> '00:39:38'
mysql> SELECT SEC_TO_TIME(2378) + 0;
-> 3938



STR_TO_DATE(str,format)
Esta es la inversa de
Esta es la inversa de la función DATE_FORMAT(). Toma la cadena str y la cadena
de formato format. STR_TO_DATE() retorna un valor DATETIME si la cadena de
formato contiene parte de fecha y hora, o un valor DATE o TIME si la cadena
contiene sólo parte de fecha o hora.
Los valores fecha, hora o fecha/hora contenidos en str deben ser dados en el
formato indicado por format. Para los especificadores que pueden usarse en
format, consulte la tabla en la descripción de la función DATE_FORMAT() . Todos
los otros caracteres no se interpretan. Si str contiene un valor fecha, hora o
fecha/hora ilegal, STR_TO_DATE() retorna NULL. A partir de MySQL 5.0.3, un valor
ilegal también produce una advertencia.
mysql> SELECT STR_TO_DATE('03.10.2003 09.20','%d.%m.%Y %H.%i');
-> '2003-10-03 09:20:00'
mysql> SELECT STR_TO_DATE('10arp', '%carp');
-> '0000-10-00 00:00:00'
mysql> SELECT STR_TO_DATE('2003-15-10 00:00:00','%Y-%m-%d
%H:%i:%s');
-> NULL
El chequeo de rango en las partes de los valores de fecha se describe en
Sección 11.3.1, “Los tipos de datos DATETIME, DATE y TIMESTAMP”. Esto significa,
por ejemplo, que una fecha con una parte de día mayor que el número de días en
un mes se permite mientras la parte del día esté en el rango de 1 a 31. También,
fechas “cero” o fechas con partes de 0 se permiten.
mysql> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');
-> '0000-00-00'
mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
-> '2004-04-31'

SUBDATE(date,INTERVAL expr type), SUBDATE(expr,days)
Cuando se invoca con la forma INTERVAL del segundo argumento, SUBDATE() es
sinónimo de DATE_SUB(). Para información del argumento INTERVAL , consulte la
discusión para DATE_ADD().
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02'
mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02'
La siguiente forma permite el uso de un valor entero para days. En tales casos, es
el número de días a ser borrados de la expresión fecha o fecha/hora expr.
mysql> SELECT SUBDATE('1998-01-02 12:00:00', 31);
-> '1997-12-02 12:00:00'
Nota no puede usar formato "%X%V" para convertir una cadena año-semana en
fecha ya que la combinación de un año y semana no identific unívocamente un año
y semana si la semana atraviesa la forntera de un mes. Para convertir un añosemana a fecha, debe especificar el día de la semana:
mysql> select str_to_date('200442 Monday', '%X%V %W');
-> 2004-10-18

SUBTIME(expr,expr2)
SUBTIME() resta expr2 de expr y retorna el resultado. expr es una expresión de
hora o fecha/hora, y expr2 es una expresión de hora.
mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999','1
1:1:1.000002');
-> '1997-12-30 22:58:58.999997'
mysql> SELECT SUBTIME('01:00:00.999999', '02:00:00.999998');
-> '-00:59:59.999999'

SYSDATE()
SYSDATE() es sinónimo de NOW().

TIME(expr)
Extrae la parte de hora de la expresión hora o fecha/hora expr.
mysql> SELECT TIME('2003-12-31 01:02:03');
-> '01:02:03'
mysql> SELECT TIME('2003-12-31 01:02:03.000123');
-> '01:02:03.000123'

TIMEDIFF(expr,expr2)
TIMEDIFF() retorna el tiempo entre la hora de inicio expr y la hora final expr2.
expr y expr2 son expresiones de hora o de fecha/hora, pero ambas deben ser del
mismo tipo.
mysql> SELECT TIMEDIFF('2000:01:01 00:00:00',
->
'2000:01:01 00:00:00.000001');
-> '-00:00:00.000001'
mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001',
->
'1997-12-30 01:01:01.000002');
-> '46:58:57.999999'

TIMESTAMP(expr) , TIMESTAMP(expr,expr2)
Con un único argumento, esta función retorna la expresión de fecha o fecha/hora
expr como valor fecha/hora. Con dos argumentos, suma la expresión de hora
expr2 a la expresión de fecha o de fecha/hora expr y retorna el resultado como
valor fecha/hora.
mysql> SELECT TIMESTAMP('2003-12-31');
-> '2003-12-31 00:00:00'
mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');
-> '2004-01-01 00:00:00'

TIMESTAMPADD(interval,int_expr,datetime_expr)
Suma la expresión entera int_expr a la expresión de fecha o de fecha/hora
datetime_expr. La unidad for int_expr la da el argumento interval , que
debe ser uno de los siguientes valores: FRAC_SECOND, SECOND, MINUTE, HOUR,
DAY, WEEK, MONTH, QUARTER, o YEAR.
El valor interval puede especificarse usando una de las palabras claves que se
muestran, o con un prefijo de SQL_TSI_. Por ejemplo, DAY o SQL_TSI_DAY son
legales.
mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');
-> '2003-01-02 00:01:00'
mysql> SELECT TIMESTAMPADD(WEEK,1,'2003-01-02');
-> '2003-01-09'
TIMESTAMPADD() está disponible desde MySQL 5.0.0.

TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)
Retorna la diferencia entera entre las expresiones de fecha o de fecha/hora
datetime_expr1 y datetime_expr2. La unidad del resultado se da en el
argumento interval. Los valores legales para interval son los mismos que los
listados en la descripción de la función TIMESTAMPADD() .
mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
-> 3
mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
-> -1
TIMESTAMPDIFF() está disponible desde MySQL 5.0.0.

TIME_FORMAT(time,format)
Se usa como la función DATE_FORMAT() pero la cadena format puede contener
sólo los especificadores de formato que tratan horas, minutos y segundos. Otros
especificadores producen un valor NULL o 0.
Si el valor time contiene una parte horaria mayor que 23, los especificadores de
formato horario %H y %k producen un valor mayor que el rango usual de 0..23. Los
otros especificadores de hora producen la hora modulo 12.
mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');
-> '100 100 04 04 4'

TIME_TO_SEC(time)
Retorna el argumento time convertido en segundos.
mysql> SELECT TIME_TO_SEC('22:23:00');
-> 80580
mysql> SELECT TIME_TO_SEC('00:39:38');
-> 2378

TO_DAYS(date)
Dada la fecha date, retorna un número de día (el número de dias desde el año 0).
mysql> SELECT TO_DAYS(950501);
-> 728779
mysql> SELECT TO_DAYS('1997-10-07');
-> 729669
TO_DAYS() no está pensado para usarse con valores anteriores al calendario
Gregoriano (1582), ya que no tiene en cuenta los días perdidos cuando se cambió
el calendario. Consulte Sección 12.6, “Qué calendario utiliza MySQL”.
Recuerde que MySQL convierte años de dos dígitos en fechas de cuatro dígitos
usando las reglas en Sección 11.3, “Tipos de fecha y hora”. Por ejemplo, '199710-07' y '97-10-07' se consideran fechas idénticas:
mysql> SELECT TO_DAYS('1997-10-07'), TO_DAYS('97-10-07');
-> 729669, 729669
Para fechas anteriores a 1582 (y posiblemente un año posterior en otras
localizaciones), los resultados de esta función no son fiables. Consulte
Sección 12.6, “Qué calendario utiliza MySQL” para más detalles.

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
Si se llama sin argumentos, retorna el timestamp de Unix (segundos desde '197001-01 00:00:00' GMT) como entero sin signo. Si se llama a
UNIX_TIMESTAMP() con un argumento date , retorna el valor del argumento como
segundos desde '1970-01-01 00:00:00' GMT. date puede ser una cadena
DATE , una cadena DATETIME , un TIMESTAMP, o un número en el formato YYMMDD
o YYYYMMDD en hora local.
mysql> SELECT UNIX_TIMESTAMP();
-> 882226357
mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
Cuando se usa UNIX_TIMESTAMP en una columna TIMESTAMP , la función retorna
el valor del timestamp interno directamente, sin conversión implícita “string-to-Unix-
timestamp” . Si pasa una fecha fuera de rango a UNIX_TIMESTAMP(), retorna 0,
pero tenga en cuenta que sólo se hace un chequeo de rango básico (año de 1970
a 2037, mes de 01 a 12, día de 01 a 31).
Si quiere restar columnas UNIX_TIMESTAMP() puede querer convertir el resultado
a enteros sin signo. Consulte Sección 12.8, “Funciones y operadores de cast”.

UTC_DATE, UTC_DATE()
Retorna la fecha UTC actual como valor en formato 'YYYY-MM-DD' o YYYYMMDD,
dependiendo si la función se usa en un contexto numérico o de cadenas de
caracteres.
mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
-> '2003-08-14', 20030814

UTC_TIME, UTC_TIME()
Retorna la hora UTC actual como valor en formato 'HH:MM:SS' or HHMMSS
dependiendo si la función se usa en un contexto numérico o de cadenas de
caracteres.
mysql> SELECT UTC_TIME(), UTC_TIME() + 0;
-> '18:07:53', 180753

UTC_TIMESTAMP, UTC_TIMESTAMP()
Retorna la fecha y hora UTC actual como valor en formato 'YYYY-MM-DD
HH:MM:SS' o YYYYMMDDHHMMSS dependiendo si la función se usa en un contexto
numérico o de cadenas de caracteres.
mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
-> '2003-08-14 18:08:04', 20030814180804

WEEK(date[,mode])
Esta función retorna el número de semana para date. La forma de dos
argumentos de WEEK() le permite especificar si la semana comienza en lunes o
domingo y si el valor de retorno debe estar en el rango de 0 a 53 o de 1 a 53. Si el
argumento mode se omite en MySQL 5.0, el valor de la variable de sistema
default_week_format se usa. Consulte Sección 5.3.3, “Variables de sistema del
servidor”.
La siguiente tabla describe cómo funciona el argumento mode :
Primer día
Modo
de semana
Rango
Semana 1 es la primera semana...
0
Domingo
0-53
con un domingo en este año
1
Lunes
0-53
con más de 3 días este año
2
Domingo
1-53
con un domingo este año
3
Lunes
1-53
con más de 3 días este año
4
Domingo
0-53
con más de 3 días este año
5
Lunes
0-53
con un lunes en este año
6
Domingo
1-53
con más de 3 días este año
7
Lunes
1-53
con un lunes en este año
mysql> SELECT
-> 7
mysql> SELECT
-> 7
mysql> SELECT
-> 8
mysql> SELECT
-> 53
WEEK('1998-02-20');
WEEK('1998-02-20',0);
WEEK('1998-02-20',1);
WEEK('1998-12-31',1);
Tenga en cuenta que si una fecha cae en la última semana del año prévio, MySQL
retorna 0 si no usa 2, 3, 6, o 7 con el argumento opcional mode :
mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);
-> 2000, 0
Se podría argumentar que MySQL debería retornar 52 para la función WEEK() , ya
que la fecha dada ocurre en la 52a semana de 1999. Decidimos retornar 0 en su
lugar porque queríamos que la función devolviera “el número de semana en el año
dado.” Esta hace uso de la función WEEK() fiable combinada con otras funciones
que extraen una parte de fecha de una fecha.
Si prefiere que el resultado a ser evaluado respecto al año que contiene el primer
día de la semana para la fecha dada, debe usar 0, 2, 5, o 7 como el argumento
mode opcional.
mysql> SELECT WEEK('2000-01-01',2);
-> 52
Alternativamente, use la función YEARWEEK():
mysql> SELECT YEARWEEK('2000-01-01');
-> 199952
mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2);
-> '52'

WEEKDAY(date)
Retorna el índice de días de la semana para date (0 = lunes, 1 = martes, ... 6 =
domingo).
mysql> SELECT WEEKDAY('1998-02-03 22:23:00');
-> 1
mysql> SELECT WEEKDAY('1997-11-05');
-> 2

WEEKOFYEAR(date)
Retorna la semana de la fecha como número del rango 1 a 53. Esta es una función
de compatibilidad equivalente a WEEK(date,3).
mysql> SELECT WEEKOFYEAR('1998-02-20');
-> 8

YEAR(date)
Retorna el año para date, en el rango 1000 a 9999.
mysql> SELECT YEAR('98-02-03');
-> 1998

YEARWEEK(date), YEARWEEK(date,start)
Retorna año y semana para una fecha. El argumento start funciona exactamente
como el argumento start de WEEK(). El año en el resultado puede ser diferente
del año en el argumento fecha para la primera y última semana del año.
mysql> SELECT YEARWEEK('1987-01-01');
-> 198653
Tenga en cuenta que el número de semana es diferente de lo que la función
WEEK() retornaría (0) para argumentos opcionales 0 o 1, como WEEK() retorna la
semana en el contexto del año dado.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en
dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y
esta traducción no necesariamente está tan actualizada como la versión original. Para
cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no
dude en dirigirse a [email protected].
Top / Previous / Next / Up / Table of Contents
Descargar