Esta seção descreve as funções que podem ser usadas para manipular valores temporais.
Veja Secção 6.2.2, “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
MySQL 4.1.1.
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
MySQL 4.1.1.
TIMESTAMP(expr)
,
TIMESTAMP(expr,expr2)
Com um argumento, retorna a expressão date ou datetime em
expr
como um valor datetime. Com dois
argumentos, adiciona a expressão time e
expr2
à expressão date ou datetime em
expr
e 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
MySQL 4.1.1.
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');
-> 3
WEEKDAY(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');
-> 2
DAYOFMONTH(data)
Retorna o dia do mês para data
, na faixa
de 1
até 31
:
mysql> SELECT DAYOFMONTH('1998-02-03');
-> 3
DAY(date)
DAY()
é um sinônimo para
DAYOFMONTH()
. Está disponível a partir
do MySQL 4.1.1.
DAYOFYEAR(data)
Retorna o dia do ano para data
, na faixa
de 1
até 366
:
mysql> SELECT DAYOFYEAR('1998-02-03');
-> 34
MONTH(data)
Retorna o mês para data
, na faixa de
1
até 12
:
mysql> SELECT MONTH('1998-02-03');
-> 2
DAYNAME(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
de 1
até 4
:
mysql> SELECT QUARTER('98-04-01');
-> 2
WEEK(data [,modo])
A função retorna o número da semana para
date
. A forma de dois argumentos de
WEEK()
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
argumento modo
é omitido, o valor de uma
variável de servidor default_week_format
(ou 0 no MySQL 4.0 e mais novo) é assumido. See
Secção 5.5.6, “Sintaxe de SET
”.
A seguinte tabela demonstra como o argumento
modo
funciona:
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 mode
de 3
pode
ser usado a partir do MySQL 4.0.5. O valor
mode
de 4
e acima pode
ser usado a partir do MySQL 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);
-> 53
Nota: Na versão 4.0, WEEK(#,0)
foi
alterado para corresponder ao calendário americano. Antes
WEEK()
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
MySQL 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, 0
Pode-se questionar que o MySQL 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 retorne ``o número
da semana do ano dado''. Isto faz com que o uso da função
WEEK()
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);
-> 52
Alternativamente 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
1
a 53
.
mysql> SELECT WEEKOFYEAR('1998-02-20');
-> 8
WEEKOFYEAR()
esta disponível a partir do
MySQL 4.1.1.
YEAR(data)
Retorna o ano para data
na faixa de
1000
a 9999
:
mysql> SELECT YEAR('98-02-03');
-> 1998
YEARWEEK(data)
,
YEARWEEK(data,inicio)
Retorna o ano e a semana para a data. O argumento
inicio
funciona exatamente como o
argumento inicio
de
WEEK()
. 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');
-> 198653
Note que o número da semana é diferente do que seria
retornado pela função WEEK()
(0
) para os argumentos opcionais
0
ou 1
, já que
WEEK()
retorna a semana no centexto de um
ano dado.
HOUR(hora)
Retorna a hora para hora
. A faixa do
valor retornado será de 0
a
23
para o valor hora do dia.
mysql> SELECT HOUR('10:05:03');
-> 10
No entanto, a faixa dos valores TIME
atualmente são muito grandes, assim HOUR
pode retornar valores maior que 23
:
mysql> SELECT HOUR('272:59:59');
-> 272
MINUTE(hora)
Retorna o minuto para hora
, na faixa de
0
a 59
:
mysql> SELECT MINUTE('98-02-03 10:05:03');
-> 5
SECOND(hora)
Retorna o segundo para hora
, na faixa de
0
a 59
:
mysql> SELECT SECOND('10:05:03');
-> 3
MICROSECOND(expr)
Retorna os microsegundos da expressão time ou datetime em
expr
como um número na faixa de
0
a 999999
.
mysql>SELECT MICROSECOND('12:00:00.123456');
-> 123456 mysql>SELECT MICROSECOND('1997-12-31 23:59:59.000010');
-> 10
MICROSECOND()
está disponível a partir
do MySQL 4.1.1.
PERIOD_ADD(P,N)
Adiciona N
meses ao período
P
(no formato AAMM
ou
AAAAMM
). Retorna um valor no formato
AAAAMM
.
Note que o argumento de período P
não é um valor de data:
mysql> SELECT PERIOD_ADD(9801,2);
-> 199803
PERIOD_DIFF(P1,P2)
Retorna o número de meses entre os períodos
P1
e P2
.
P1
e P2
devem estar no
formato AAMM
ou
AAAAMM
.
Note que os argumentos de período P1
e
P2
não
são valores de data:
mysql> SELECT PERIOD_DIFF(9802,199703);
-> 11
DATE_ADD(data,INTERVAL tipo expr)
,
DATE_SUB(data,INTERVAL tipo expr)
Estas funções realizam operações aritméticas em datas.
A partir do MySQL 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 valor
DATETIME
ou DATE
especificando a data de início. expr
is
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
tipo
e expr
se
relacionam:
tipo do valor
|
Formarto esperado da
expr
|
SECOND |
SECONDS |
MINUTE |
MINUTES |
HOUR |
HOURS |
DAY |
DAYS |
MONTH |
MONTHS |
YEAR |
YEARS |
MINUTE_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 tipo
DAY_MICROSECOND
,
HOUR_MICROSECOND
,
MINUTE_MICROSECOND
,
SECOND_MICROSECOND
e
MICROSECOND
são permitidos após o MySQL
4.1.1.
O MySQL permite qualquer delimitador de pontuação no
formato de expr
. Os delimitadores
mostrados na tabela são apenas sugeridos. Se o argumento
date
é um valor de
DATA
e seus cálculos envolvem apenas as
partes ANO
, MÊS
, e
DIA
(into é, nenhuma parte de hora), o
resultado é um valor do tipo DATE
.
Senão, o resultado é um valor do tipo
DATETIME
:
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
), MySQL assume que você não
especificou a parte mais a esquerda do valor do intervalo.
Por exemplo, se você especifica um tipo
DAY_SECOND
, o valor esperado de
expr
deverá ter as partes de dias,
horas, minutos e segundos. Se você especifica um valor como
'1:10'
, MySQL 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 MySQL interpreta valores TIME
representado 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ê adicionar
MONTH
, YEAR_MONTH
, ou
YEAR
e 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
INTERVAL
e o especificador
tipo
não são caso sensitivo.
ADDDATE(data,INTERVAL expr type)
,
ADDDATE(expr,dias)
Quando chamada com a forma INTERVAL
do
segundo argumento, ADDDATE()
é um
sinônimo para DATE_ADD()
. A função
relcionada SUBDATE()
é um sinônimo para
DATE_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 MySQL 4.1.1, a segunda sintaxe é permitida,
onde expr
é uma expresão date ou
datetime e dias
é o número de dias a
ser adicionado a expr
.
mysql> SELECT ADDDATE('1998-01-02', 31);
-> '1998-02-02'
ADDTIME(expr,expr2)
ADDTIME()
adiciona
expr2
a expr
e retorna
o resultado. expr
é uma expressão date
ou datetime, e expr2
é 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 MySQL 4.1.1.
EXTRACT(tipo FROM data)
A função EXTRACT()
usa o mesmo tipo de
intervalo especificado como DATE_ADD()
ou
DATE_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");
-> 123
DATEDIFF(expr,expr2)
,
TIMEDIFF(expr,expr2)
DATEDIFF()
retorna o número de dias
entre a data inicial expr
e a data final
expr2
. expr
e
expr2
sã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
inicial expr
e a hora final
expr2
. expr
e
expr2
sã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()
e
TIMEDIFF()
foram adicionados no MySQL
4.1.1.
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');
-> 729669
TO_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
valor DATE
:
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 data
de acordo com a
string formato
string. Os seguintes
identificadores podem ser utilizados na string
formato
:
Specifier | Description |
%M |
Nome do mês (January ..December ) |
%W |
Nome da semana (Sunday ..Saturday ) |
%D |
Dia do mês com sufixo Inglês (0th ,
1st , 2nd ,
3rd , etc.) |
%Y |
Ano, numerico, 4 digitos |
%y |
Ano, numerico, 2 digitos |
%X |
Ano para a semana onde o Domingo é o primeiro dia da semana, numerico,
4 digitos; usado com %V
|
%x |
Ano para a semana onde a segunda é o primeiro dia da semana, numerico,
4 digitos; usado com %v
|
%a |
Nome da semana abreviado
(Sun ..Sat ) |
%d |
Dia do mês, numerico (00 ..31 ) |
%e |
Dia do mês, numerico (0 ..31 ) |
%m |
Mês, numerico (00 ..12 ) |
%c |
Mês, numerico (0 ..12 ) |
%b |
Nome do mês abreviado (Jan ..Dec ) |
%j |
Dia do ano (001 ..366 ) |
%H |
Hora (00 ..23 ) |
%k |
Hora (0 ..23 ) |
%h |
Hora (01 ..12 ) |
%I |
Hora (01 ..12 ) |
%l |
Hora (1 ..12 ) |
%i |
Minutos, numerico (00 ..59 ) |
%r |
Tempo, 12-horas (hh:mm:ss seguido por
AM ou PM ) |
%T |
Tempo, 24-horas (hh:mm:ss ) |
%S |
Segundos (00 ..59 ) |
%s |
Segundos (00 ..59 ) |
%f |
Microsegundos (000000 ..999999 ) |
%p |
AM ou PM
|
%w |
Dia da semana
(0 =Domingo..6 =Sabado) |
%U |
Semana(00 ..53 ), onde o Domingo é
o primeiro dia da semana. |
%u |
Semana(00 ..53 ), onde a Segunda é
o primeiro dia da semana. |
%V |
Semana(01 ..53 ), onde o Domingo é
o primeiro dia da semana; usado com
%X
|
%v |
Semana(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 %f
está
disponível a partir do MySQL 4.1.1.
Como na versão 3.23 do MySQL, o caracter
‘%
’ é exigido antes dos
caracteres de especificação de formato. Em versões
anteriores do MySQL ‘%
’ era
opcional.
A razão para a faixa de valores do mês e do dia começarem
com zero é que o MySQL permite datas incompletas tais como
'2004-00-00'
serem armazenadas no MySQL
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 string
str
, e um formato
format
, e retorna uma valor DATETIME.
Os valores date, time, ou datetime contidos em
str
devem ser dados no formato indicado
por format
. Para o especificadores que
podem ser usados em format
, veja a tabela
na descrição da função DATE_FORMAT()
.
Todos os outros caracteres serão apenas exibidos, não
sendo interpretados. Se str
contém um
valor date, time, ou datetime ilegal,
STR_TO_DATE()
retorna
NULL
.
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')
-> NULL
STR_TO_DATE()
está disponível a partir
do MySQL 4.1.1.
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()
e STR_TO_DATE()
, e quando configurarmos
as variáveis do servidor DATE_FORMAT
,
TIME_FORMAT
e
DATETIME_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ção
DATE_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-2003
GET_FORMAT()
está disponível a partir
do MySQL 4.1.1. Veja See Secção 5.5.6, “Sintaxe de SET
”.
SUBDATE(date,INTERVAL expr type)
,
SUBDATE(expr,days)
Quando chamado com a forma INTERVAL
do
segunto argumento, SUBDATE()
é um
sinonimo para DATE_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 MySQL 4.1.1, a segunda sintaxe é permitida,
onde expr
é uma expressão date ou
datetime e days
é o número de dias a
ser subtraído de expr
.
mysql> SELECT SUBDATE('1998-01-02 12:00:00', 31);
-> '1997-12-02 12:00:00'
SUBTIME(expr,expr2)
SUBTIME()
subtrai
expr2
de expr
e
retorna o resultado. expr
é uma
expressão date ou datetime, e expr2
é
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 MySQL 4.1.1.
TIME_FORMAT(hora,formato)
É usado como a função DATE_FORMAT()
acima, mas a string de formato
pode
conter apenas os especificadores de formato que tratam de
horas, minutos e segundos. Outros especificadores produzem
um valor NULL
ou 0
.
Se o valor time
contém uma hora que é
maior que 23
, os especificadores de
formato de hora %H
e
%k
produzem um valor maior que a faixa
como de 0..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
NULL
se 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');
-> NULL
LAST_DAY()
está disponível a partir do
MySQL 4.1.1.
MAKEDATE(ano,diadoano)
Retorna uma data, dado os valores da ano e dia do ano.
diadoano
deve 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);
-> NULL
MAKEDATE()
está disponível a partir do
MySQL 4.1.1.
MAKETIME(hora,minuto,segundo)
Retorna um valor time calculado a partir dos argmentos
hora
, minuto
e
segundo
.
mysql> SELECT MAKETIME(12,15,30);
-> '12:15:30'
MAKETIME()
está disponível a partir do
MySQL 4.1.1.
CURDATE()
,
CURRENT_DATE
,
CURRENT_DATE()
Retorna a data atual como um valor no formato
'YYYY-MM-DD'
ou
YYYYMMDD
, dependendo se a função é
usada num contexto numérico ou de string.
mysql>SELECT CURDATE();
-> '1997-12-15' mysql>SELECT CURDATE() + 0;
-> 19971215
CURTIME()
,
CURRENT_TIME
,
CURRENT_TIME()
Retorna a hora atual como um valor no formato
'HH:MM:SS'
ou HHMMSS
,
dependo se a função é usada em um contexto numérico ou
como string:
mysql>SELECT CURTIME();
-> '23:50:26' mysql>SELECT CURTIME() + 0;
-> 235026
NOW()
, 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'
ou
YYYYMMDDHHMMSS
, 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;
-> 19971215235026
UNIX_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. Se
UNIX_TIMESTAMP()
é chamada com um
argumento data
, é retornado o valor do
argumento como segundo desde '1970-01-01
00:00:00'
GMT. data
pode ser um
string DATE
, uma string
DATETIME
, um
TIMESTAMP
, ou um número no formato
YYMMDD
ou YYYYMMDD
na
hora local:
mysql>SELECT UNIX_TIMESTAMP();
-> 882226357 mysql>SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
Qaundo UNIX_TIMESTAMP
é usado em uma
coluna TIMESTAMP
, a função retorna o
valor timestamp interno diretamente, sem nenhuma conversão
``string-para-unix-timestamp'' implicita. Se você passar
uma data fora da faixa para
UNIX_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. See
Secção 6.3.5, “Funções de Conversão”.
FROM_UNIXTIME(unix_timestamp)
,
FROM_UNIXTIME(unix_timestamp,format)
Retorna a representação do argumento
unix_timestamp
como um valor no formato
'YYYY-MM-DD HH:MM:SS'
ou
YYYYMMDDHHMMSS
, 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;
-> 19971004222300
Se o formato
é dado o resultado é
formatado de acordo com a string formato
.
formato
pode conter os especificadores
listados acima para a função
DATE_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'
ou HHMMSS
,
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;
-> 3938
TIME_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');
-> 2378
UTC_DATE
, UTC_DATE()
Retorna a data UTC atual como um valor no formato
'YYYY-MM-DD'
ou
YYYYMMDD
, dependendo se a função é
usada emum contexto string ou numérico:
mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
-> '2003-08-14', 20030814
UTC_DATE()
está disponível a partir do
MySQL 4.1.1.
UTC_TIME
, UTC_TIME()
Retorna a hora UTC atual como um valor no formato
'HH:MM:SS'
ou HHMMSS
,
dependendo se a função é usada em um contexto string ou
numérico:
mysql> SELECT UTC_TIME(), UTC_TIME() + 0;
-> '18:07:53', 180753
UTC_TIME()
está disponível a partir do
MySQL 4.1.1.
UTC_TIMESTAMP
,
UTC_TIMESTAMP()
Retorna a data e hora UTC atual como um valor no formato
'YYYY-MM-DD HH:MM:SS'
ou
YYYYMMDDHHMMSS
, 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', 20030814180804
UTC_TIMESTAMP()
está disponível a
partir do MySQL 4.1.1.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.