Funções de Data e Hora
Esta seção descreve as funções que podem ser usadas para manipular valores temporais.
Veja "Tipos de Data e Hora" para uma descrição da faixa de valores que cada tipo tem e os formatos válidos nos quais valores de data e hora podes ser especificados.
Aqui está um exemplo que usa funções de data. A consulta seguinte seleciona todos os registros com um valores em uma coluna col_data dentro dos últimos 30 dias:
mysql> SELECT algo FROM nome_tabela
WHERE TO_DAYS(NOW()) - TO_DAYS(col_data) <= 30;
(Note que a consulta também selecionará registros com datas futuras.)
Funções que esperam valores de data normaemente aceitaram valores datetime e ignoram a parte da hora. Funções que esperam valores de hora normalmente aceitarão valores datetime e ignoram a parte da data.
Funções que retornam a data ou hora atual são avaliadas apenas uma vez por consulta, no inicio da sua execução. Isto significa que várias referências a uma função com NOW() dentro de uma mesma consulta sempre produzirá o memo resultado. Este princípio também se aplica a CURDATE(), CURTIME(), UTC_DATE(), UTC_TIME(), UTC_TIMESTAMP(), e qualquer um dos seus sinônimos.
A faixa do valor retornado na seguinte descrição da função se aplica a datas completas. Se uma data é um valor zero
ou uma data incompleta tal como '2001-11-00', funções que extraem parte de uma data podem retornam 0. Por exemplo, DAYOFMONTH('2001-11-00') retorna 0.
DATE(expr)
Extrai a parte da data da expressão date ou datetime em
expr.mysql>
SELECT DATE('2003-12-31 01:02:03');-> '2003-12-31'DATE()está disponível a partir do MariaDB.TIME(expr)
Extrai a parte da hora da expressão time ou datetime em
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'TIME()está disponível a partir do MariaDB.TIMESTAMP(expr),TIMESTAMP(expr,expr2)
Com um argumento, retorna a expressão date ou datetime em
exprcomo um valor datetime. Com dois argumentos, adiciona a expressão time eexpr2à expressão date ou datetime emexpre retorna um valor datetime.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'TIMESTAMP()está disponível a partir do MariaDB.DAYOFWEEK(data)Retorna o índice do dia da semana para
data(1= Domingo,2= Segunda, ...7= Sábado). Estes valores de índices correspondem ao padrão ODBC.mysql>
SELECT DAYOFWEEK('1998-02-03');-> 3WEEKDAY(data)Retorna o índice do dia das semana para
data(0= Segunda,1= Terça, ...6= Domingo):mysql>
SELECT WEEKDAY('1998-02-03 22:23:00');-> 1 mysql>SELECT WEEKDAY('1997-11-05');-> 2DAYOFMONTH(data)Retorna o dia do mês para
data, na faixa de1até31:mysql>
SELECT DAYOFMONTH('1998-02-03');-> 3DAY(date)
DAY()é um sinônimo paraDAYOFMONTH(). Está disponível a partir do MariaDB.DAYOFYEAR(data)Retorna o dia do ano para
data, na faixa de1até366:mysql>
SELECT DAYOFYEAR('1998-02-03');-> 34MONTH(data)Retorna o mês para
data, na faixa de1até12:mysql>
SELECT MONTH('1998-02-03');-> 2DAYNAME(data)Retorna o nome do dia da semana para
data:mysql>
SELECT DAYNAME('1998-02-05');-> 'Thurday'MONTHNAME(data)Retorna o nome do mês para
data:mysql>
SELECT MONTHNAME('1998-02-05');-> 'February'QUARTER(data)Retorna o trimaster para
data, na faixa de1até4:mysql>
SELECT QUARTER('98-04-01');-> 2WEEK(data [,modo])A função retorna o número da semana para
date. A forma de dois argumentos deWEEK()permite que você especifique se a semana começa no Domingo ou na Segunda e se o valor de retorno deve estar na faixa de 0-53 ou 1-5. Quando o argumentomodoé omitido, o valor de uma variável de servidordefault_week_format(ou 0 no MariaDB e mais novo) é assumido. Leia "Sintaxe deSET".A seguinte tabela demonstra como o argumento
modofunciona:Valor Significado 0 Semana começa no Domingo; retorna o valor na faixa de 0 a 53; semana 1 é a primeira semana neste ano. 1 Semana começa na Segunda; retorna o valor na faixa de 0 a 53; semana 1 é a primeira semana com mais de 3 dias neste ano 2 Semana começa no Domingo; retorna o valor na faixa de 1 a 53; semana 1 é a primeira semana neste ano. 3 Semana começa na Segunda; retorna o valor na faixa de 1 a 53; semana 1 é a primeira semana com mais de 3 dias neste ano. 4 Semana começa no Domingo; retorna o valor na faixa de 0 a 53; semana 1 é a primeira semana com mais de 3 dias neste ano. 5 Semana começa na Segunda; retorna o valor na faixa de 0 a 53; semana 1 é a primeira semana neste ano. 6 Semana começa no Domingo; retorna o valor na faixa de 0 a 53; semana 1 é a primeira semana que tenha mais de 3 dias neste ano. 7 Semana começa na Segunda; retorna o valor na faixa de 1 a 53; semana 1 é a primeira semana neste ano. O valor
modede3pode ser usado a partir do MariaDB 4.0.5. O valormodede4e acima pode ser usado a partir do MariaDB 4.0.17.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);-> 53Nota: Na versão 4.0,
WEEK(#,0)foi alterado para corresponder ao calendário americano. AntesWEEK()era calculada de forma errada para data no EUA. (Na verdade WEEK(#) e WEEK(#,0) era errado para todos os casos).Note que se a data for a última semana do ano anterior, o MariaDB retornará 0 se você não usar 2, 3, 6 ou 7 como argumento opcional
modo:mysql>
SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);-> 2000, 0Pode-se questionar que o MariaDB deveria retornar 52 para a função
WEEK()ja que a data dada ocorre, na verdade, ma 52a. semana de 1999. Nós decidimos retornar 0 já que queremos que função retorneo número da semana do ano dado
. Isto faz com que o uso da funçãoWEEK()seja seguro quando combinado com outras funções que extraiam um parte de uma data.Se você prefere que o resultado seja avaliado em relacão ao ano que aontém o primeiro dia da semana de uma data dada, então você deve usar o 2, 3, 6 ou 7 como argumento opcional
modo:mysql>
SELECT WEEK('2000-01-01',2);-> 52Alternativamente você pode usar a função
YEARWEEK():mysql>
SELECT YEARWEEK('2000-01-01');-> 199952 mysql>SELECT MID(YEARWEEK('2000-01-01'),5,2);-> '52'WEEKOFYEAR(data)
Retorna a semana da data como um número na faixa de
1a53.mysql>
SELECT WEEKOFYEAR('1998-02-20');-> 8WEEKOFYEAR()esta disponível a partir do MariaDB.YEAR(data)Retorna o ano para
datana faixa de1000a9999:mysql>
SELECT YEAR('98-02-03');-> 1998YEARWEEK(data),YEARWEEK(data,inicio)
Retorna o ano e a semana para a data. O argumento
iniciofunciona exatamente como o argumentoiniciodeWEEK(). Note que o ano pode ser diferente do ano no argumento data para a primeira e a última semana do ano:mysql>
SELECT YEARWEEK('1987-01-01');-> 198653Note que o número da semana é diferente do que seria retornado pela função
WEEK()(0) para os argumentos opcionais0ou1, já queWEEK()retorna a semana no centexto de um ano dado.HOUR(hora)Retorna a hora para
hora. A faixa do valor retornado será de0a23para o valor hora do dia.mysql>
SELECT HOUR('10:05:03');-> 10No entanto, a faixa dos valores
TIMEatualmente são muito grandes, assimHOURpode retornar valores maior que23:mysql>
SELECT HOUR('272:59:59');-> 272MINUTE(hora)Retorna o minuto para
hora, na faixa de0a59:mysql>
SELECT MINUTE('98-02-03 10:05:03');-> 5SECOND(hora)Retorna o segundo para
hora, na faixa de0a59:mysql>
SELECT SECOND('10:05:03');-> 3MICROSECOND(expr)
Retorna os microsegundos da expressão time ou datetime em
exprcomo um número na faixa de0a999999.mysql>
SELECT MICROSECOND('12:00:00.123456');-> 123456 mysql>SELECT MICROSECOND('1997-12-31 23:59:59.000010');-> 10MICROSECOND()está disponível a partir do MariaDB.PERIOD_ADD(P,N)Adiciona
Nmeses ao períodoP(no formatoAAMMouAAAAMM). Retorna um valor no formatoAAAAMM.Note que o argumento de período
Pnão é um valor de data:mysql>
SELECT PERIOD_ADD(9801,2);-> 199803PERIOD_DIFF(P1,P2)Retorna o número de meses entre os períodos
P1eP2.P1eP2devem estar no formatoAAMMouAAAAMM.Note que os argumentos de período
P1eP2não são valores de data:mysql>
SELECT PERIOD_DIFF(9802,199703);-> 11DATE_ADD(data,INTERVAL tipo expr),DATE_SUB(data,INTERVAL tipo expr)
Estas funções realizam operações aritméticas em datas.
A partir do MariaDB 3.23,
INTERVAL expr tipoé permitido nos dois lados do operador+se a expressao em ambos os lados é um valor date ou datetime. Para o operador-,INTERVAL expr tipoeé permitido apenas no lado direito, porque não faz sentido subtrair um valor date ou datetime de um intervalo. (Veja exemplo abaixo.)dataé um valorDATETIMEouDATEespecificando a data de início.expris an expressão especificando o intervala a ser adicionado ou subtraido da data de início.expré uma string; ela pode iniciar com um '-' para intervalos negativos.typeé uma palavra chave indicando como a expressão deve ser interpretada.A seguinte tabela mostra como os argumentos
tipoeexprse relacionam:tipo dovalorFormarto esperado da exprSECONDSECONDSMINUTEMINUTESHOURHOURSDAYDAYSMONTHMONTHSYEARYEARSMINUTE_SECOND'MINUTES:SECONDS'HOUR_MINUTE'HOURS:MINUTES'DAY_HOUR'DAYS HOURS'YEAR_MONTH'YEARS-MONTHS'HOUR_SECOND'HOURS:MINUTES:SECONDS'DAY_MINUTE'DAYS HOURS:MINUTES'DAY_SECOND'DAYS HOURS:MINUTES:SECONDS'DAY_MICROSECOND'DAYS.MICROSECONDS'HOUR_MICROSECOND'HOURS.MICROSECONDS'MINUTE_MICROSECOND'MINUTES.MICROSECONDS'SECOND_MICROSECOND'SECONDS.MICROSECONDS'MICROSECOND'MICROSECONDS'Os valores do
tipoDAY_MICROSECOND,HOUR_MICROSECOND,MINUTE_MICROSECOND,SECOND_MICROSECONDeMICROSECONDsão permitidos após o MariaDB.O MariaDB permite qualquer delimitador de pontuação no formato de
expr. Os delimitadores mostrados na tabela são apenas sugeridos. Se o argumentodateé um valor deDATAe seus cálculos envolvem apenas as partesANO,MÊS, eDIA(into é, nenhuma parte de hora), o resultado é um valor do tipoDATE. Senão, o resultado é um valor do tipoDATETIME: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'Se você especificado um intervalo muito curto (não inclue todas as partes que seriam esperadas pelo intervalo para aquele
tipo), MariaDB assume que você não especificou a parte mais a esquerda do valor do intervalo. Por exemplo, se você especifica umtipo DAY_SECOND, o valor esperado deexprdeverá ter as partes de dias, horas, minutos e segundos. Se você especifica um valor como'1:10', MariaDB assume que as partes do dia e da hora foram esquecidas e o valor representa minutos e segundos. Em outras palavras,'1:10' DAY_SECONDé interpretado de forma equivalente a'1:10' MINUTE_SECOND. Isto é análogo a forma que o MariaDB interpreta valoresTIMErepresentado tempo decorrido no lugar de hora do dia.Note que se você adicionar ou subtrair de uma data algo contendo uma parte de hora, o resultado é automaticamente convertido para um valor datetime:
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'Se você utilizar datas mal formadas, o valor retornado
NULL. Sê você adicionarMONTH,YEAR_MONTH, ouYEARe a data resultante tiver um dia maior que o dia máximo para aquele mês, o dia é ajustado para o dia máximo no mês.mysql>
SELECT DATE_ADD('1998-01-30', interval 1 month);-> '1998-02-28'Note pelo exemplo anterior que a palavra-chave
INTERVALe o especificadortiponão são caso sensitivo.ADDDATE(data,INTERVAL expr type),ADDDATE(expr,dias)
Quando chamada com a forma
INTERVALdo segundo argumento,ADDDATE()é um sinônimo paraDATE_ADD(). A função relcionadaSUBDATE()é um sinônimo paraDATE_SUB().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'A partir do MariaDB, a segunda sintaxe é permitida, onde
expré uma expresão date ou datetime ediasé o número de dias a ser adicionado aexpr.mysql>
SELECT ADDDATE('1998-01-02', 31);-> '1998-02-02'ADDTIME(expr,expr2)
ADDTIME()adicionaexpr2aexpre retorna o resultado.expré uma expressão date ou datetime, eexpr2é uma expressão time.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'ADDTIME()foi adicionado no MariaDB.EXTRACT(tipo FROM data)A função
EXTRACT()usa o mesmo tipo de intervalo especificado comoDATE_ADD()ouDATE_SUB(), mas extrai partes da da data em vez de realizar aritimética de data.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.00123');-> 123DATEDIFF(expr,expr2),TIMEDIFF(expr,expr2)
DATEDIFF()retorna o número de dias entre a data inicialexpre a data finalexpr2.expreexpr2são expressões de datas ou data e hora. Apenas a parte da data dos valores sã usados no cálculo.TIMEDIFF()retorna o tempo entre a hora inicialexpre a hora finalexpr2.expreexpr2são expressões de hora ou data e hora, mas ambas devem ser do mesmo tipo.mysql>
SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');-> 1 mysql>SELECT DATEDIFF('1997-11-31 23:59:59','1997-12-31');-> -30 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'DATEDIFF()eTIMEDIFF()foram adicionados no MariaDB.TO_DAYS(data)Dada uma data
data, retorna o número do dia (o número de dias desde o ano 0);mysql>
SELECT TO_DAYS(950501);-> 728779 mysql>SELECT TO_DAYS('1997-10-07');-> 729669TO_DAYS()não pode ser usado com valores que orecedem o advento do calendario Gregoriano (1582), porque ele não leva em conta os dias perdidos quando o calendário foi mudado.FROM_DAYS(N)Dado um número de dia
N, retorna um valorDATE:mysql>
SELECT FROM_DAYS(729669);-> '1997-10-07'FROM_DAYS()não pode ser usado com valores que orecedem o advento do calendario Gregoriano (1582), porque ele não leva em conta os dias perdidos quando o calendário foi mudado.DATE_FORMAT(data,formato)Formata o valor de
datade acordo com a stringformatostring. Os seguintes identificadores podem ser utilizados na stringformato:Specifier Description %MNome do mês ( January..December)%WNome da semana ( Sunday..Saturday)%DDia do mês com sufixo Inglês ( 0th,1st,2nd,3rd, etc.)%YAno, numerico, 4 digitos %yAno, numerico, 2 digitos %XAno para a semana onde o Domingo é o primeiro dia da semana, numerico, 4 digitos; usado com %V%xAno para a semana onde a segunda é o primeiro dia da semana, numerico, 4 digitos; usado com %v%aNome da semana abreviado ( Sun..Sat)%dDia do mês, numerico ( 00..31)%eDia do mês, numerico ( 0..31)%mMês, numerico ( 00..12)%cMês, numerico ( 0..12)%bNome do mês abreviado ( Jan..Dec)%jDia do ano ( 001..366)%HHora ( 00..23)%kHora ( 0..23)%hHora ( 01..12)%IHora ( 01..12)%lHora ( 1..12)%iMinutos, numerico ( 00..59)%rTempo, 12-horas ( hh:mm:ssseguido porAMouPM)%TTempo, 24-horas ( hh:mm:ss)%SSegundos ( 00..59)%sSegundos ( 00..59)%fMicrosegundos ( 000000..999999)%pAMouPM%wDia da semana ( 0=Domingo..6=Sabado)%USemana( 00..53), onde o Domingo é o primeiro dia da semana.%uSemana( 00..53), onde a Segunda é o primeiro dia da semana.%VSemana( 01..53), onde o Domingo é o primeiro dia da semana; usado com%X%vSemana( 01..53), onde a Segunda é o primeiro dia da semana; usado com%x%%Um literal ' %'.Todos os outros caracteres são apenas copiados para o resultado, sem interpretação.
O especificador dr formato
%festá disponível a partir do MariaDB.Como na versão 3.23 do MariaDB, o caracter '
%' é exigido antes dos caracteres de especificação de formato. Em versões anteriores do MariaDB '%' era opcional.A razão para a faixa de valores do mês e do dia começarem com zero é que o MariaDB permite datas incompletas tais como
'2004-00-00'serem armazenadas no MariaDB 3.23.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'STR_TO_DATE(str,format)
Esta é a função reversa da função
DATE_FORMAT(). Ela pega uma stringstr, e um formatoformat, e retorna uma valor DATETIME.Os valores date, time, ou datetime contidos em
strdevem ser dados no formato indicado porformat. Para o especificadores que podem ser usados emformat, veja a tabela na descrição da funçãoDATE_FORMAT(). Todos os outros caracteres serão apenas exibidos, não sendo interpretados. Sestrcontém um valor date, time, ou datetime ilegal,STR_TO_DATE()retornaNULL.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('10rap', '%crap')-> 0000-10-00 00:00:00 mysql>SELECT STR_TO_DATE('2003-15-10 00:00:00', '%Y-%m-%d %H:%i:%s')-> NULLSTR_TO_DATE()está disponível a partir do MariaDB.GET_FORMAT(DATE | TIME | TIMESTAMP, 'EUR' | 'USA' | 'JIS' | 'ISO' | 'INTERNAL')
Retorna uma string de formato. Esta função é útil combinado com as funções
DATE_FORMAT()eSTR_TO_DATE(), e quando configurarmos as variáveis do servidorDATE_FORMAT,TIME_FORMATeDATETIME_FORMAT. Os três valores possíveis para o primeiro argumento e os cinco valores possíveis para o segundo argumento resultam em 15 strings de formato possíveis (para o especificador usado, veja a tabela na descrição da funçãoDATE_FORMAT()):Chamada da Função 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(TIMESTAMP,'USA')'%Y-%m-%d-%H.%i.%s'GET_FORMAT(TIMESTAMP,'JIS')'%Y-%m-%d %H:%i:%s'GET_FORMAT(TIMESTAMP,'ISO')'%Y-%m-%d %H:%i:%s'GET_FORMAT(TIMESTAMP,'EUR')'%Y-%m-%d-%H.%i.%s'GET_FORMAT(TIMESTAMP,'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'Formato ISO é do ISO ISO 9075, não do ISO 8601.
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 mysql>SET DATE_FORMAT=GET_FORMAT(DATE, 'USA'); SELECT '2003-10-31';-> 10-31-2003GET_FORMAT()está disponível a partir do MariaDB. Veja Leia "Sintaxe deSET".SUBDATE(date,INTERVAL expr type),SUBDATE(expr,days)
Quando chamado com a forma
INTERVALdo segunto argumento,SUBDATE()é um sinonimo paraDATE_SUB().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'A partir do MariaDB, a segunda sintaxe é permitida, onde
expré uma expressão date ou datetime edaysé o número de dias a ser subtraído deexpr.mysql>
SELECT SUBDATE('1998-01-02 12:00:00', 31);-> '1997-12-02 12:00:00'SUBTIME(expr,expr2)
SUBTIME()subtraiexpr2deexpre retorna o resultado.expré uma expressão date ou datetime, eexpr2é uma expressão time.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'SUBTIME()foi adicionado no MariaDB.TIME_FORMAT(hora,formato)É usado como a função
DATE_FORMAT()acima, mas a string deformatopode conter apenas os especificadores de formato que tratam de horas, minutos e segundos. Outros especificadores produzem um valorNULLou0.Se o valor
timecontém uma hora que é maior que23, os especificadores de formato de hora%He%kproduzem um valor maior que a faixa como de0..23. O outro especificador do formato de hora produz o valor da hora módulo 12:mysql>
SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');-> '100 100 04 04 4'LAST_DAY(data)
Pega um valor date ou datetime e retorna o valor correspondente para o último dia do mês. Retorna
NULLse o argumento é invalido.mysql>
SELECT LAST_DAY('2003-02-05'), LAST_DAY('2004-02-05');-> '2003-02-28', '2004-02-29' mysql>SELECT LAST_DAY('2004-01-01 01:01:01');-> '2004-01-31' mysql>SELECT LAST_DAY('2003-03-32');-> NULLLAST_DAY()está disponível a partir do MariaDB.MAKEDATE(ano,diadoano)
Retorna uma data, dado os valores da ano e dia do ano.
diadoanodeve ser maior que 0 ou o resultado será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);-> NULLMAKEDATE()está disponível a partir do MariaDB.MAKETIME(hora,minuto,segundo)
Retorna um valor time calculado a partir dos argmentos
hora,minutoesegundo.mysql>
SELECT MAKETIME(12,15,30);-> '12:15:30'MAKETIME()está disponível a partir do MariaDB.CURDATE(),CURRENT_DATE,CURRENT_DATE()
Retorna a data atual como um valor no formato
'YYYY-MM-DD'ouYYYYMMDD, dependendo se a função é usada num contexto numérico ou de string.mysql>
SELECT CURDATE();-> '1997-12-15' mysql>SELECT CURDATE() + 0;-> 19971215CURTIME(),CURRENT_TIME,CURRENT_TIME()
Retorna a hora atual como um valor no formato
'HH:MM:SS'ouHHMMSS, dependo se a função é usada em um contexto numérico ou como string:mysql>
SELECT CURTIME();-> '23:50:26' mysql>SELECT CURTIME() + 0;-> 235026NOW(),SYSDATE(),CURRENT_TIMESTAMP,CURRENT_TIMESTAMP(),LOCALTIME,LOCALTIME(),LOCALTIMESTAMP,LOCALTIMESTAMP()
Retorna a data e hora atual como um valor no formato
'YYYY-MM-DD HH:MM:SS'ouYYYYMMDDHHMMSS, dependendo se a função é utilizada num contexto numérico ou de string.mysql>
SELECT NOW();-> '1997-12-15 23:50:26' mysql>SELECT NOW() + 0;-> 19971215235026UNIX_TIMESTAMP(),UNIX_TIMESTAMP(data)Se chamado sem argumento, retorna um tipo timestamp do Unix (segundos desde
'1970-01-01 00:00:00'GMT) como um inteiro sem sinal. SeUNIX_TIMESTAMP()é chamada com um argumentodata, é retornado o valor do argumento como segundo desde'1970-01-01 00:00:00'GMT.datapode ser um stringDATE, uma stringDATETIME, umTIMESTAMP, ou um número no formatoYYMMDDouYYYYMMDDna hora local:mysql>
SELECT UNIX_TIMESTAMP();-> 882226357 mysql>SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');-> 875996580Qaundo
UNIX_TIMESTAMPé usado em uma colunaTIMESTAMP, a função retorna o valor timestamp interno diretamente, sem nenhuma conversãostring-para-unix-timestamp
implicita. Se você passar uma data fora da faixa paraUNIX_TIMESTAMP(), a função irá retornar 0, mas por favor note que só verificações básicas são realizadas. (ano 1970-2037, mês 01-12, dia 01-31).Se você subtrair colunas
UNIX_TIMESTAMP(), você pode querer mudar o resultado para inteiro com sinal. Leia "Funções de Conversão".FROM_UNIXTIME(unix_timestamp),FROM_UNIXTIME(unix_timestamp,format)Retorna a representação do argumento
unix_timestampcomo um valor no formato'YYYY-MM-DD HH:MM:SS'ouYYYYMMDDHHMMSS, dependendo de do contexto em que a funçõ é utilizada:mysql>
SELECT FROM_UNIXTIME(875996580);-> '1997-10-04 22:23:00' mysql>SELECT FROM_UNIXTIME(875996580) + 0;-> 19971004222300Se o
formatoé dado o resultado é formatado de acordo com a stringformato.formatopode conter os especificadores listados acima para a funçãoDATE_FORMAT()mysql>
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),->'%Y %D %M %h:%i:%s %x');->'2003 6th August 06:22:58 2003'SEC_TO_TIME(seconds)Retorna o argumento
segundos, convertido em horas, minutos e segundos como um valor no formato'HH:MM:SS'ouHHMMSS, dependendo do contexto em que a função é utilizada:mysql>
SELECT SEC_TO_TIME(2378);-> '00:39:38' mysql>SELECT SEC_TO_TIME(2378) + 0;-> 3938TIME_TO_SEC(time)Retorna o argumento
time, convertido em segundos:mysql>
SELECT TIME_TO_SEC('22:23:00');-> 80580 mysql>SELECT TIME_TO_SEC('00:39:38');-> 2378UTC_DATE,UTC_DATE()
Retorna a data UTC atual como um valor no formato
'YYYY-MM-DD'ouYYYYMMDD, dependendo se a função é usada emum contexto string ou numérico:mysql>
SELECT UTC_DATE(), UTC_DATE() + 0;-> '2003-08-14', 20030814UTC_DATE()está disponível a partir do MariaDB.UTC_TIME,UTC_TIME()
Retorna a hora UTC atual como um valor no formato
'HH:MM:SS'ouHHMMSS, dependendo se a função é usada em um contexto string ou numérico:mysql>
SELECT UTC_TIME(), UTC_TIME() + 0;-> '18:07:53', 180753UTC_TIME()está disponível a partir do MariaDB.UTC_TIMESTAMP,UTC_TIMESTAMP()
Retorna a data e hora UTC atual como um valor no formato
'YYYY-MM-DD HH:MM:SS'ouYYYYMMDDHHMMSS, dependendo se a função é usada em um contexto string ou numérico:mysql>
SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;-> '2003-08-14 18:08:04', 20030814180804UTC_TIMESTAMP()está disponível a partir do MariaDB.