Você está na página 1de 7

Banco de Dados

Prof. Bruno Guedes


E-mail:
mail: brunofguedes@gmail.com

Formatos de data e hora no MySQL


O MySQL tem tipos de campos especficos para representar data e
hora: DATE e TIME, respectivamente.
Para representar valores combinados dos dois tipos, possvel usar o
DATETIME.
Estes valores podem ser armazenados e apresentados nos seguintes
formatos:
Os valores DATE so manipulados como strings no formato CCYY-MMDD onde CC, YY, MM e DD representam o sculo (century), o ano
(year), o ms e o dia do ms.
Os valores TIME so representados por strings, no formato hh:mm:ss
hora (hh), minutos (mm) e segundos (ss).

Formatos de data e hora (Continuao)


Valores DATETIME so strings combinadas de data e hora:
CCYY-MM-DD hh:mm:ss.
O TIMESTAMP inclui data e hora, mas representado em
uma string CCYYMMDDhhmmss.
Este tipo de campo possui algumas propriedades especiais
e tem valores um pouco mais difceis de se ler, primeira
vista. Como regra geral, contudo, voc pode tratar os
campos TIMESTAMP da mesma forma como trata os
DATETIME.
A seguir, analisaremos alguns exemplos desse tipo de
dados.

Formatos de data e hora (Continuao)


No exemplo, abaixo, veja a representao dos campos hora_saida e
hora_chegada, da tabela viagem:
SELECT hora_saida, hora_chegada FROM viagem;

As datas, podem ser representadas, dentro da tabela, da seguinte


forma:
SELECT data_saida FROM viagem;

OBS: No se esquea que as datas esto no formato ANO-MS-DIA:

Formatos de data e hora (Continuao)


Os campos gravados com valores do tipo DATETIME, na minha tabela
registros esto representados da seguinte forma:
SELECT data_nascimento FROM registros;

Estes mesmos valores, se usado o formato do tipo TIMESTAMP, sero


representados da seguinte forma:
SELECT data_nascimento FROM registros;

OBS: A leitura da informao TIMESTAMP um pouco difcil, mas um


formato perfeito para nomear arquivos ou ser livremente formatado pelo
desenvolvedor, atravs de funes de tratamento de strings.

Como lidar com os formatos de dados de


data e hora no MySQL
O formato CCYY-MM-DD, usado pelo MySQL para armazenar dados
referentes a data (DATE) segue o padro ISO 8601. Este formato tem a
vantagem de compor uma string que naturalmente organizvel em
ordem temporal, uma vez que o ano, o ms e o dia so representados
com tamanhos fixos e da esquerda para direita.
importante ressaltar que no possvel alterar a forma como o
MySQL grava dados em campos DATE. Se voc usa outro formato no
seu programa, poder usar uma funo como a DATE_FORMAT() para
adequar a string de data ao respectivo campo.
Outra observao importante que no possvel armazenar datas no
formato DD/MM/YY (Dia/Ms/Ano). A funo DATE_FORMAT tambm
pode ser usada para formatar a exibio da data.
Alguns programadores optam por armazenar seus dados de datas
como strings comuns (em campos do tipo CHAR) e lidam com as datas
dentro de seus scripts. Nesse caso, perde-se a possibilidade de fazer
operaes com as datas, dentro do banco de dados, o que pode trazer
ganhos de performance para o sistema.

Como formatar a exibio de datas e horas


no MySQL
Podemos exibir as datas armazenadas no MySQL de inmeras formas,
limitadas apenas pela nossa imaginao. Tanto possvel usar um
formato padro, como 1997-19-01 (CCYY-MM-DD), quanto um formato
mais literrio, como dezenove de Janeiro de mil novecentos e
noventa e nove.
Para obter o efeito desejado, podemos usar funes do prprio MySQL
ou de alguma linguagem de programao, usada para acessar o banco
de dados.
Como j foi dito anteriormente o MySQLsegue o padro ISO 8601 para
armazenar os valores referentes a datas. No podemos mudar isto.
Mas fcil pegar esta informao e exibi-la da maneira que acharmos
melhor.
Para realizar a tarefa, usaremos
DATE_FORMAT() ou TIME_FORMAT().

as

funes

do

MySQL

Funo DATE_FORMAT()
A funo DATE_FORMAT() usa 2 argumentos, dentre os valores DATE,
DATETIME ou TIMESTAMP e uma string descrevendo como o
resultado dever ser exibido.
Dentro da string de formatao, podemos usar sequncias especiais
para especificar qual parte da data dever ser exibida, conforme
mostrado a seguir:
Especificador

Descrio

%a

Nome do dia da semana abreviado

%b

Nome do ms abreviado

%c

Nmero do ms

%D

Dia do ms, com o sufixo indicador de numeral ordinal, em


ingls (0th, 1st, 2nd, 3rd etc.)

%d

Dia do ms, em numerais cardinais (00 a 31)

%e

Dia do ms, numrico, sem a necessidade de acrescentar


um zero para formar 2 dgitos (0, 1, 2 31)

Funo DATE_FORMAT()
Especificador

Descrio

%f

Microssegundos (000000 999999)

%H

Hora no formato 24h (00 23)

%h

Hora (01 12)

%i

Minutos em formato numrico (00 59)

%j

Dia do ano (001 366)

%k

Hora do dia (0 23)

%l

Hora do dia (1 12)

%M

Nome do ms

%m

Ms em formato numrico (00 12)

%p

AM ou PM

%r

Hora no formato 12h (hh:mm:ss) seguido de AM ou PM

%S

Segundos (00 59)

%T

Hora do dia, em formato 24h (hh:mm:ss)

%U

Semana do ano (00 53), em que Sunday (Domingo) o


primeiro dia da semana;

Funo DATE_FORMAT()
Especificador

Descrio

%W

Nome do dia da semana

%w

Nmero do dia da semana (0=Domingo, 1=Segunda-feira


etc.)

%Y

Ano em formato numrico, com 4 dgitos

%y

Ano em formato numrico, com 2 dgitos

OBS1: A faixa de valores dos especificadores para meses


e dias comeam em zero por que o MySQL permite o
armazenamento de datas incompletas, tal como 2016-0000.
OBS2: O idioma usado para nomes de dias, meses e
abreviaes controlado pelo valor da varivel de
sistema lc_time_names.

Alterando o idioma usado para exibir os


nomes de dias, meses e abreviaes
Podemos ver o valor atual da varivel com o uso do
comando SELECT, do MySQL:
SELECT @@lc_time_names;
e usar o comando SET para alterar a varivel:
SET lc_time_names = 'pt_BR';
O problema desta abordagem que ela se perde ao
encerrar a sesso do MySQL.
Para tornar a configurao permanente, use GLOBAL,
deste jeito:
SET GLOBAL lc_time_names = pt_BR;

Funo DATE_FORMAT () Exemplo de uso


SELECT DATE_FORMAT('2021-08-06','%W %a %M %b');

Em uma tabela com campos de datas podemos obter sua


visualizao em formatos diferentes, conforme o exemplo
a seguir:
SELECT NomeCliente, DataNascimentoCliente,
DATE_FORMAT(DataNascimentoCliente, '%M %d, %Y) from
CadastroClientes LIMIT 5;

Funo DATE_FORMAT () Exemplo de uso

Podemos usar clusula AS, para melhorar a aparncia da


sada dos dados:
SELECT NomeCliente AS 'Cliente,
DATE_FORMAT(DataNascimentoCliente, 'dia %d de %M de %Y') AS
'Data de nascimento from CadastroClientes LIMIT 5;

Funo TIME_FORMAT () Exemplo de uso


A funo TIME_FORMAT() tem a mesma sintaxe de
DATE_FORMAT(), s que ela se refere parte do horrio,
especificamente.
SELECT NomeCliente, DataCadastroCliente,
TIME_FORMAT(DataCadastroCliente, '%r') AS 'Formato 12h,
TIME_FORMAT(DataCadastroCliente, '%T') AS 'Formato 24h FROM
CadastroClientes LIMIT 50,2\G;