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> SELECTsomethingFROMtbl_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 :
        
| typeValue | Expected exprFormat | 
| MICROSECOND | MICROSECONDS | 
| SECOND | SECONDS | 
| MINUTE | MINUTES | 
| HOUR | HOURS | 
| DAY | DAYS | 
| WEEK | WEEKS | 
| MONTH | MONTHS | 
| QUARTER | QUARTERS | 
| YEAR | YEARS | 
| SECOND_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  se permite en
          cualquier lado del operador expr
          type+ si la
          expresión en el otro lado es una fecha o fecha y hora. Para
          el operador - , INTERVAL
           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.)
        expr
          type
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 | 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 | AMoPM | 
| %r | Hora, 12 horas ( hh:mm:ssseguido deAMoPM) | 
| %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 | 
| %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 | Resultado | 
| GET_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' | 
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 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ñ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'
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,
          '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.
        
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 :
        
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 mysql-es@vespito.com.

