Times Tramp

28
10.3.1.1. Propiedades de fecha y hora Columnas TIMESTAMP se muestran en el mismo formato que las columnas DATETIME. En otras palabras, el ancho de la pantalla se fija en 19 caracteres y el formato es 'AAAA-MM-DD HH'. Nota En versiones anteriores de MySQL (anteriores a la 4.1), las propiedades del tipo de datos TIMESTAMP difieren significativamente en varias formas de lo que se describe en esta sección (véase la MySQL 3.23, 4.0, 4.1 Reference Manual para obtener detalles); Estos incluyen extensiones de sintaxis que están en desuso en MySQL 5.1 y ya no se admite en MySQL 5.5. Esto tiene implicaciones para realizar un dump y restore o replicar entre versiones de MySQL Server. Si utiliza las columnas que se definen mediante la sintaxis antigua de TIMESTAMP(N), consulte la sección 2.12.1.2, "Actualización de MySQL 4.1 a 5.0", antes de actualizar a MySQL 5.1 o posterior. Valores TIMESTAMP se convierten de la zona horaria actual a UTC para almacenamiento de información y convertidos desde UTC en la zona horaria actual para la recuperación. (Esto ocurre sólo para el tipo de datos TIMESTAMP, no para otros tipos como DATETIME). De forma predeterminada, la zona horaria actual para cada conexión es tiempo del servidor. La zona horaria se puede establecer en una función de la conexión, tal como se describe en la sección 9.6, "Soporte de zona horaria de MySQL Server". Como la configuración de zona horaria se mantiene constante, obtendrá el mismo valor que almacena. Si almacena un valor de marca de hora y, a continuación, cambiar la zona horaria y recuperar el valor, el valor recuperado es diferente del valor que almacena. Esto ocurre porque la misma zona horaria no fue utilizada para la conversión en ambas direcciones. La zona horaria actual está disponible como el valor de la variable de sistema time_zone. El tipo de datos TIMESTAMP ofrece inicialización automática y actualización. Usted puede elegir si desea utilizar estas propiedades y la columna debe tenerlas: para una columna TIMESTAMP en una tabla, puede asignar la fecha y hora actual como el valor predeterminado y el valor de actualización automática. Es posible que la fecha y hora actual es el valor predeterminado para inicializar la columna, el valor de actualización automática, o ambas. No es posible establecer la fecha y hora actual el valor predeterminado de una columna y el valor de actualización automática para otra columna. Puede utilizarse cualquier columna TIMESTAMP en una tabla que se inicializado a la fecha y hora actuales, o se actualiza automáticamente. Esto no debería ser la primera columna TIMESTAMP. Si se especifica un valor predeterminado para la primera columna TIMESTAMP en una tabla, no se ignora. El valor predeterminado puede ser CURRENT_TIMESTAMP o una fecha constante y un valor de tiempo. En una instrucción CREATE TABLE, la primera columna TIMESTAMP puede declararse en cualquiera de las siguientes maneras: con cláusulas DEFAULT CURRENT_TIMESTAMP y ON UPDATE CURRENT_TIMESTAMP, la columna tiene la fecha y hora actual para su valor predeterminado y se actualiza automáticamente. Con cláusulas predeterminado ni ON UPDATE, es lo mismo que DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP. Con una cláusula DEFAULT CURRENT_TIMESTAMP y ninguna cláusula ON UPDATE, la columna tiene la fecha y hora actual para su valor predeterminado, pero no se actualiza automáticamente. Con ninguna cláusula DEFAULT y con una cláusula ON UPDATE CURRENT_TIMESTAMP, la columna tiene un valor predeterminado de 0 y se actualiza automáticamente. Con un valor constante de forma predeterminada, la columna tiene el valor por defecto determinado y no se inicializa automáticamente en la fecha y hora actual. Si la columna tiene también una cláusula ON UPDATE CURRENT_TIMESTAMP, se actualiza automáticamente; de lo contrario, tiene un valor predeterminado constante y no se actualiza automáticamente. En otras palabras, puede utilizar la fecha y hora actual para tanto el valor inicial y el valor de actualización automática, o uno o ninguno. (Por ejemplo, puede especificar ON

Transcript of Times Tramp

Page 1: Times Tramp

10.3.1.1. Propiedades de fecha y horaColumnas TIMESTAMP se muestran en el mismo formato que las columnas DATETIME. En otras palabras, el ancho de la pantalla se fija en 19 caracteres y el formato es 'AAAA-MM-DD HH'. NotaEn versiones anteriores de MySQL (anteriores a la 4.1), las propiedades del tipo de datos TIMESTAMP difieren significativamente en varias formas de lo que se describe en esta sección (véase la MySQL 3.23, 4.0, 4.1 Reference Manual para obtener detalles); Estos incluyen extensiones de sintaxis que están en desuso en MySQL 5.1 y ya no se admite en MySQL 5.5. Esto tiene implicaciones para realizar un dump y restore o replicar entre versiones de MySQL Server. Si utiliza las columnas que se definen mediante la sintaxis antigua de TIMESTAMP(N), consulte la sección 2.12.1.2, "Actualización de MySQL 4.1 a 5.0", antes de actualizar a MySQL 5.1 o posterior. Valores TIMESTAMP se convierten de la zona horaria actual a UTC para almacenamiento de información y convertidos desde UTC en la zona horaria actual para la recuperación. (Esto ocurre sólo para el tipo de datos TIMESTAMP, no para otros tipos como DATETIME). De forma predeterminada, la zona horaria actual para cada conexión es tiempo del servidor. La zona horaria se puede establecer en una función de la conexión, tal como se describe en la sección 9.6, "Soporte de zona horaria de MySQL Server". Como la configuración de zona horaria se mantiene constante, obtendrá el mismo valor que almacena. Si almacena un valor de marca de hora y, a continuación, cambiar la zona horaria y recuperar el valor, el valor recuperado es diferente del valor que almacena. Esto ocurre porque la misma zona horaria no fue utilizada para la conversión en ambas direcciones. La zona horaria actual está disponible como el valor de la variable de sistema time_zone. El tipo de datos TIMESTAMP ofrece inicialización automática y actualización. Usted puede elegir si desea utilizar estas propiedades y la columna debe tenerlas: para una columna TIMESTAMP en una tabla, puede asignar la fecha y hora actual como el valor predeterminado y el valor de actualización automática. Es posible que la fecha y hora actual es el valor predeterminado para inicializar la columna, el valor de actualización automática, o ambas. No es posible establecer la fecha y hora actual el valor predeterminado de una columna y el valor de actualización automática para otra columna. Puede utilizarse cualquier columna TIMESTAMP en una tabla que se inicializado a la fecha y hora actuales, o se actualiza automáticamente. Esto no debería ser la primera columna TIMESTAMP. Si se especifica un valor predeterminado para la primera columna TIMESTAMP en una tabla, no se ignora. El valor predeterminado puede ser CURRENT_TIMESTAMP o una fecha constante y un valor de tiempo. En una instrucción CREATE TABLE, la primera columna TIMESTAMP puede declararse en cualquiera de las siguientes maneras: con cláusulas DEFAULT CURRENT_TIMESTAMP y ON UPDATE CURRENT_TIMESTAMP, la columna tiene la fecha y hora actual para su valor predeterminado y se actualiza automáticamente. Con cláusulas predeterminado ni ON UPDATE, es lo mismo que DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP. Con una cláusula DEFAULT CURRENT_TIMESTAMP y ninguna cláusula ON UPDATE, la columna tiene la fecha y hora actual para su valor predeterminado, pero no se actualiza automáticamente. Con ninguna cláusula DEFAULT y con una cláusula ON UPDATE CURRENT_TIMESTAMP, la columna tiene un valor predeterminado de 0 y se actualiza automáticamente. Con un valor constante de forma predeterminada, la columna tiene el valor por defecto determinado y no se inicializa automáticamente en la fecha y hora actual. Si la columna tiene también una cláusula ON UPDATE CURRENT_TIMESTAMP, se actualiza automáticamente; de lo contrario, tiene un valor predeterminado constante y no se actualiza automáticamente. En otras palabras, puede utilizar la fecha y hora actual para tanto el valor inicial y el valor de actualización automática, o uno o ninguno. (Por ejemplo, puede especificar ON UPDATE para activar la actualización automática sin tener la columna inicializada automático.) Las siguientes definiciones de columna demuestran cada posibilidad: inicialización automática y actualización automática: ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPAuto-inicialización: ts TIMESTAMP DEFAULT CURRENT_TIMESTAMPActualización automática sólo: ts marca de hora predeterminado 0 en UPDATE CURRENT_TIMESTAMPNinguno: ts marca de hora predeterminado 0Para especificar automático por defecto o actualizando para una columna TIMESTAMP distinta de la primera, debe suprimir los comportamientos de inicialización y actualización automáticos para la primera columna TIMESTAMP asignándole explícitamente un valor constante (por ejemplo, predeterminado 0 o predeterminado ' 2003-01-01 00: 00: 00'). Entonces, para la otra columna de marca de hora, las reglas son las mismas para la primera columna TIMESTAMP, excepto que si omite tanto de las cláusulas DEFAULT y ON UPDATE, no inicialización automática o actualización se produce. Ejemplo: CREATE TABLE t (ST1 marca de hora predeterminado 0,ST2 TIMESTAMP DEFAULT CURRENT_TIMESTAMPEN LA ACTUALIZACIÓN CURRENT_TIMESTAMP);CURRENT_TIMESTAMP o cualquiera de sus sinónimos (CURRENT_TIMESTAMP(), NOW(), hora local, LOCALTIME(), CURRENT_TIMESTAMP o Now() puede utilizarse en las cláusulas DEFAULT y ON UPDATE. Todos significan "la hora actual". (No se permite UTC_TIMESTAMP. Su gama

Page 2: Times Tramp

Separar fecha y hora

1. mysql> SELECT *FROM fechita;2. +---------------------+3. | fec                 |4. +---------------------+5. | 2010-08-10 08:24:46 |6. +---------------------+7. 1 row IN SET (0.00 sec)8.  9. mysql> SELECT 10. >DATE_FORMAT(fec,'%d-%m-%Y') fecha, 11. >DATE_FORMAT(fec,'%h:%i:%s')hora 12. >FROM fechita;13. +------------+----------+14. | fecha      | hora     |15. +------------+----------+16. | 10-08-2010 | 08:24:46 |17. +------------+----------+18. 1 row IN SET (0.02 sec)

Ejemplos

11.3.1. Los tipos de datos DATETIME, DATE y TIMESTAMP[+/-]

11.3.1.1. Propiedades de TIMESTAMP desde MySQL 4.1

Los tipos DATETIME, DATE, and TIMESTAMP están relacionados. Esta sección describe sus características, en qué se parecen y en qué difieren.

El tipo DATETIME se usa cuando necesita valores que contienen información de fecha y hora. MySQL recibe y muestra los valores DATETIME en formato 'YYYY-MM-DD HH:MM:SS' . El rango soportado es de '1000-01-01 00:00:00' a '9999-12-31 23:59:59'. (“Soportado” significa que aunque valores anteriores pueden funcionar, no hay garantías)

El tipo DATE se usa cuando necesita sólo un valor de fecha, sin una parte de hora. MySQL recibe y muestra los valores DATE en formato 'YYYY-MM-DD' . El rango soportado es de '1000-01-01' a '9999-12-31'.

Page 3: Times Tramp

El tipo TIMESTAMP tiene varias propiedades, en función de la versión de MySQSL y el modo SQL que esté ejecutando el servidor. Estas propiedades se describen posteriormente en esta sección.

Puede especificar valores DATETIME, DATE, y TIMESTAMP usando cualquier de los siguientes formatos:

Como cadena de caracteres en formato 'YYYY-MM-DD HH:MM:SS' o 'YY-MM-DD HH:MM:SS' . Una sintaxis “relajada” se permite: Cualquier carácter de puntuación puede usarse como delimitador entre partes de fecha o de hora. Por ejemplo, '98-12-31 11:30:45', '98.12.31 11+30+45', '98/12/31 11*30*45', y '98@12@31 11^30^45' son equivalentes.

Como cadena de caracteres en formato 'YYYY-MM-DD' or 'YY-MM-DD' . Se permite una sintaxis “relajada” . Por ejemplo, '98-12-31', '98.12.31', '98/12/31', y '98@12@31' son equivalentes.

Como cadena de caracteres sin delimitadores en formato 'YYYYMMDDHHMMSS' o 'YYMMDDHHMMSS', mientras que la cadena de caracteres tenga sentido como fecha. Por ejemmplo, '19970523091528' y '970523091528' se interpretan como '1997-05-23 09:15:28', pero '971122129015' es ilegal (tiene una parte de minutos sin sentido) y se convierte en '0000-00-00 00:00:00'.

Como cadena de caracteres sin delimitadores en formato 'YYYYMMDD' o 'YYMMDD' , mientras que el cadena de caracteres tenga sentido como fecha. Por ejemplo, '19970523' y '970523' se interpretan como '1997-05-23', pero '971332' es ilegal (tiene una parte de mes y día sin sentido) y se convierte en '0000-00-00'.

Como número en formato YYYYMMDDHHMMSS o YYMMDDHHMMSS, mientras que el número tenga sentido como fecha. Por ejemplo, 19830905132800 y 830905132800 se interpretan como '1983-09-05 13:28:00'.

Como número en formato YYYYMMDD o YYMMDD, mientras que el número tenga sentido como fecha. Por ejemplo, 19830905 y 830905 se interpretan como '1983-09-05'.

Como resultado de una función que retorne un valor acceptable en un contexto DATETIME, DATE, o TIMESTAMP , como NOW() o CURRENT_DATE.

Los valores ilegales de DATETIME, DATE, o TIMESTAMP se convierten al valor “cero” del tipo apropiado ('0000-00-00 00:00:00', '0000-00-00', o 00000000000000).

Para valores especificados como cadenas de caracteres que incluyan partes de fecha delimitadas, no es necesario especificar dos dígitos para valores de mes o día menores que 10. '1979-6-9' es lo mismo que '1979-06-09'. Similarmente, para valores especificados como cadenas de caracteres que incluyan delimitadores para la parte de hora, no es necesario especificar dos dígitos para horas, minutos o segundos menores que 10. '1979-10-30 1:2:3' es lo mismo que '1979-10-30 01:02:03'.

Los valores especificados como números deben tener una longitud de 6, 8, 12, o 14 dígitos. Si un número tiene una longitud de 8 o 14 dígitos, se asume que está en formato YYYYMMDD o YYYYMMDDHHMMSS y que el año lo dan los primeros 4 dígitos. Si el número tiene 6 o 12 dígitos de longitud, se asume que está en formato YYMMDD o YYMMDDHHMMSS y que el año lo dan los primeros 2 dígitos. A los números que no tengan estas longitudes se les añaden ceros a la izquierda hasta la longitud más cercana permitida.

Page 4: Times Tramp

Los valores especificados como cadenas de caracteres no delimitadas se interpretan usando su longitud. Si la cadena de caracteres tiene longitud 8 o 14, el año se asume como dado por los primeros 4 caracteres. En el resto de caso, se supone que el año lo dan los primeros 2 caracteres. La cadena de caracteres se interpreta de izquierda a derecha para encontrar el año, mes, día, hora, minuto y segundo, para tantas partes como representa la cadena de caracteres. Esto significa que no debe usar cadenas de caracteres con menos de 6 caracteres. Por ejemplo, si especifica '9903', pensando que representa Marzo, 1999, MySQL inserta un valor “cero” en la tabla. Esto es porque el valor de año y mes son 99 y 03, pero la parte de día no se encuentra, así que el valor no es una fecha legal. Sin embargo, puede especificar explícitamente un valor de cero para representar partes de día y mes. Por ejemplo, puede usar '990300' para insertar el valor '1999-03-00'.

Puede asignar valores de un tipo a un objeto de un tipo diferente hasta un límite. Sin embargo, hay algunas alteraciones del valor o pérdidas de información:

Si asigna un valor DATE a un objeto DATETIME o TIMESTAMP, la parte de hora del valor resultante se cambia a '00:00:00' ya que el valor DATE no contiene información temporal.

Si asigna un valor DATETIME o TIMESTAMP a un objeto DATE, la parte temporal del valor resultante se borra porque el tipo DATE no tiene información temporal.

Tenga en cuenta que aunque DATETIME, DATE, y TIMESTAMP pueden especificarse usando el mismo conjunto de formatos, los tipos no tienen el mismo rango de valores. Por ejemplo, TIMESTAMP no pueden ser anteriores a 1970 o posteriores a 2037. Esto significa que una fecha como '1968-01-01', que sería legal como DATETIME o DATE no es un valor válido TIMESTAMP y se convierte a 0 si se asigna a un objeto de este tipo.

Tenga en cuenta ciertas cosas al especificar valores temporales:

El formato relajado para valores especificados como cadenas de caracteres puede ser problemático. Por ejemplo, un valor como '10:11:12' puede parecer una hora por el delimitador ':' , pero si se usa en un contexto de fecha se interpreta como '2010-11-12'. El valor '10:45:15' se convierte a '0000-00-00' ya que '45' no es un mes legal.

El servidor MySQL realiza sólo chequeo básico de la validez de las fechas: Los rangos para año, mes y día son de 1000 a 9999, 00 a 12, y 00 a 31, respectivamente. Cualquier fecha que contenga partes fuera de estos rangos está sujeta a conversión a '0000-00-00'. Tenga en cuenta que esto permite almacenar fechas inválidas como '2002-04-31'. Para asegurar que una fecha es válida, haga una comprobación en su aplicación.

Fechas con valores de año de dos dígitos son ambíguas porque no se conoce el siglo. MySQL interpreta los años de dos dígitos usando las siguientes reglas:

Los valores de años en el rango 00-69 se convierten a 2000-2069. Los valores de años en el rango 70-99 se convierten a 1970-1999.

Page 5: Times Tramp

12.5. Funciones de fecha y horaEsta 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'

Page 6: Times Tramp

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();

Page 7: Times Tramp

-> '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)

Page 8: Times Tramp

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 Expected expr FormatMICROSECOND MICROSECONDSSECOND SECONDSMINUTE MINUTESHOUR HOURSDAY DAYSWEEK WEEKSMONTH MONTHSQUARTER QUARTERSYEAR YEARSSECOND_MICROSECOND 'SECONDS.MICROSECONDS'MINUTE_MICROSECOND 'MINUTES.MICROSECONDS'MINUTE_SECOND 'MINUTES:SECONDS'HOUR_MICROSECOND 'HOURS.MICROSECONDS'HOUR_SECOND 'HOURS:MINUTES:SECONDS'HOUR_MINUTE 'HOURS:MINUTES'DAY_MICROSECOND 'DAYS.MICROSECONDS'DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'DAY_MINUTE 'DAYS HOURS:MINUTES'DAY_HOUR 'DAYS HOURS'YEAR_MONTH '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;

Page 9: Times Tramp

-> '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'

Page 10: Times Tramp

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 Descripción%a Día de semana abreviado (Sun..Sat)%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;

Page 11: Times Tramp

usado con %x %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)

Page 12: Times Tramp

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”.

Page 13: Times Tramp

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 ResultadoGET_FORMAT(DATE,'USA') '%m.%d.%Y'GET_FORMAT(DATE,'JIS') '%Y-%m-%d'GET_FORMAT(DATE,'ISO') '%Y-%m-%d'GET_FORMAT(DATE,'EUR') '%d.%m.%Y'GET_FORMAT(DATE,'INTERNAL') '%Y%m%d'GET_FORMAT(DATETIME,'USA') '%Y-%m-%d-%H.%i.%s'GET_FORMAT(DATETIME,'JIS') '%Y-%m-%d %H:%i:%s'GET_FORMAT(DATETIME,'ISO') '%Y-%m-%d %H:%i:%s'GET_FORMAT(DATETIME,'EUR') '%Y-%m-%d-%H.%i.%s'GET_FORMAT(DATETIME,'INTERNAL') '%Y%m%d%H%i%s'GET_FORMAT(TIME,'USA') '%h:%i:%s %p'GET_FORMAT(TIME,'JIS') '%H:%i:%s'GET_FORMAT(TIME,'ISO') '%H:%i:%s'GET_FORMAT(TIME,'EUR') '%H.%i.%S'GET_FORMAT(TIME,'INTERNAL') '%H%i%s'

Page 14: Times Tramp

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().

Page 15: Times Tramp

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');

Page 16: Times Tramp

-> 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.

Page 17: Times Tramp

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 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'

Page 18: Times Tramp

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ño-semana 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'

Page 19: Times Tramp

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)

Page 20: Times Tramp

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” .

Page 21: Times Tramp

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, '1997-10-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 '1970-01-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.

Page 22: Times Tramp

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 WEEK('1998-02-20');

-> 7

mysql> SELECT WEEK('1998-02-20',0);

-> 7

mysql> SELECT WEEK('1998-02-20',1);

-> 8

mysql> SELECT WEEK('1998-12-31',1);

-> 53

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 :

Page 23: Times Tramp

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');

Page 24: Times Tramp

-> 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.