Procurar
Últimos assuntos
Trabalhando com Datas
Página 1 de 1
Trabalhando com Datas
Trabalhando com Datas
Trabalhando com datas no SQL Server
A algum tempo atrás a comunidade da informática se mobilizou para prevenir o famoso Bug do milênio.
Bom pessoal, vamos falar um pouco sobre como o SQL Server segue a solução da Microsoft para o Bug do milênio e como se trabalhar com dados do tipo data neste Banco de Dados.
Desde o lançamento da primeira versão do Windows 95, a Microsoft utiliza a mesma técnica para evitar o bug do Milênio.
Funciona assim: o sistema interpreta datas com dois dígitos dependendo de uma configuração. Nesta configuração o usuário fornece um intervalo de datas e dependendo deste intervalo, o sistema considera a data como sendo a partir do ano 2000 ou não. Por exemplo: se o intervalo de datas for de 1950 ate 2049 isto significa que, se uma data com dois dígitos para representar o ano, for até 49 será considerada como 2049. Agora se os dígitos forem acima de 49, por exemplo 66, a data será considerada como 1966.
Lembrando que este tipo de verificação se aplica somente quando estamos trabalhando com datas utilizando dois dígitos para representar o ano. Datas utilizando quatro dígitos não sofrem este tipo de verificação.
O SQL Server utiliza dois tipo básicos para armazenar e trabalhar com datas: datetime e smalldatetime.
A diferença entre eles é que o tipo de dados datetime armazena até centésimos de segundo e o smalldatetime até segundos. Mais uma: o smalldatetime armazena datas a partir de 1900, ou seja, se você precisa utilizar datas anteriores a 1900, vai ter que utilizar datetime.
Vamos ver alguns exemplo. Vamos utilizar a seguinte tabela:
CREATE TABLE T_DATAS
(
DATA DATETIME,
DATA1 SMALLDATETIME
)
Agora, para podermos inserir algumas datas, primeiramente temos que converter a data para um formato do tipo caracter. Podemos fazer de isto automaticamente:
INSERT INTO T_DATAS VALUES('01/01/01','01/01/01')
No exemplo acima, como passamos as datas somente com dois dígitos para representar o ano, a regra do bug do milênio será aplicada e será considerado o ano de 2001.
Agora uma pergunta: por que esta instrução INSERT a seguir falhará?
INSERT INTO T_DATAS VALUES('31/12/01','31/12/2001')
Internamente, o SQL Server armazena datas no formato americano, ou seja, MM/DD/AAAA. E no nosso exemplo, as duas datas que foram passadas estão no formato português ( DD/MM/AAAA). Atenção pessoal: isto é só para armazenamento, ou seja, para retornar os dados vocês podem mudar a data.
Ainda falando um pouco sobre armazenamento, os dois tipos de dados armazenam horas, minutos e segundos. Por padrão, se nenhuma destas informações acima for fornecida, o valor é 00:00:00 (meia noite). Agora , se desejarmos inserir um horário para a data , temos que fazer assim:
INSERT INTO T_DATAS VALUES('01/01/1901 10:10:01','12/31/01 22:10:01')
Para vizualizarmos os dados, podemos simplesmente retornar o campo como ele está na tabela. Mas, se quisermos, podemos mudar o formato de retorno utilizando uma função chamada CONVERT() que serve para converter um tipo de dados em outro. Quando utilizamos a função CONVERT()com datas, podemos passar um terceiro parâmetro para indicar o formato. Exemplo:
/* Mostra a data atual no formato padrão */
SELECT GETDATE()
/* Converte a data atual para caracter e mostra no formato MM/DD/AAAA */
SELECT CONVERT(CHAR,GETDATE(),101 )
/* Converte a data atual para caracter e mostra no formato AAAA.MM.DD */
SELECT CONVERT(CHAR,GETDATE(),102 )
/* Converte a data atual para caracter e mostra no formato DD/MM/AAAA */
SELECT CONVERT(CHAR,GETDATE(),103 )
/* Converte a data atual para caracter e mostra no formato MM/DD/AA */
SELECT CONVERT(CHAR,GETDATE(),1 )
/* Converte a data atual para caracter e mostra no formato AA.MM.DD
Somente os dois últimos dígitos do ano */
SELECT CONVERT(CHAR,GETDATE(),2 )
/* Converte a data atual para caracter e mostra no formato DD/MM/AA
Somente os dois últimos dígitos do ano */
SELECT CONVERT(CHAR,GETDATE(),3 )
Lembrando sempre de que, como a data vai aparecer para o usuário depende também do tratamento que a aplicação client (quem solicitou os dados) pode fazer.
Para finalizar, algumas funções úteis para o tratamento de datas:
/* Adiciona três dias na data atual */
SELECT DATEADD(DAY,3,GETDATE())
/* Diferença entre datas. Mostra quantos dias se passaram deste o começo do ano 2001 até a data atual*/
SELECT DATEDIFF(DAY,'01/01/2001',GETDATE())
/* Retorna somente o mês da data atual */
SELECT DATEPART(MONTH,GETDATE())
Trabalhando com datas no SQL Server
A algum tempo atrás a comunidade da informática se mobilizou para prevenir o famoso Bug do milênio.
Bom pessoal, vamos falar um pouco sobre como o SQL Server segue a solução da Microsoft para o Bug do milênio e como se trabalhar com dados do tipo data neste Banco de Dados.
Desde o lançamento da primeira versão do Windows 95, a Microsoft utiliza a mesma técnica para evitar o bug do Milênio.
Funciona assim: o sistema interpreta datas com dois dígitos dependendo de uma configuração. Nesta configuração o usuário fornece um intervalo de datas e dependendo deste intervalo, o sistema considera a data como sendo a partir do ano 2000 ou não. Por exemplo: se o intervalo de datas for de 1950 ate 2049 isto significa que, se uma data com dois dígitos para representar o ano, for até 49 será considerada como 2049. Agora se os dígitos forem acima de 49, por exemplo 66, a data será considerada como 1966.
Lembrando que este tipo de verificação se aplica somente quando estamos trabalhando com datas utilizando dois dígitos para representar o ano. Datas utilizando quatro dígitos não sofrem este tipo de verificação.
O SQL Server utiliza dois tipo básicos para armazenar e trabalhar com datas: datetime e smalldatetime.
A diferença entre eles é que o tipo de dados datetime armazena até centésimos de segundo e o smalldatetime até segundos. Mais uma: o smalldatetime armazena datas a partir de 1900, ou seja, se você precisa utilizar datas anteriores a 1900, vai ter que utilizar datetime.
Vamos ver alguns exemplo. Vamos utilizar a seguinte tabela:
CREATE TABLE T_DATAS
(
DATA DATETIME,
DATA1 SMALLDATETIME
)
Agora, para podermos inserir algumas datas, primeiramente temos que converter a data para um formato do tipo caracter. Podemos fazer de isto automaticamente:
INSERT INTO T_DATAS VALUES('01/01/01','01/01/01')
No exemplo acima, como passamos as datas somente com dois dígitos para representar o ano, a regra do bug do milênio será aplicada e será considerado o ano de 2001.
Agora uma pergunta: por que esta instrução INSERT a seguir falhará?
INSERT INTO T_DATAS VALUES('31/12/01','31/12/2001')
Internamente, o SQL Server armazena datas no formato americano, ou seja, MM/DD/AAAA. E no nosso exemplo, as duas datas que foram passadas estão no formato português ( DD/MM/AAAA). Atenção pessoal: isto é só para armazenamento, ou seja, para retornar os dados vocês podem mudar a data.
Ainda falando um pouco sobre armazenamento, os dois tipos de dados armazenam horas, minutos e segundos. Por padrão, se nenhuma destas informações acima for fornecida, o valor é 00:00:00 (meia noite). Agora , se desejarmos inserir um horário para a data , temos que fazer assim:
INSERT INTO T_DATAS VALUES('01/01/1901 10:10:01','12/31/01 22:10:01')
Para vizualizarmos os dados, podemos simplesmente retornar o campo como ele está na tabela. Mas, se quisermos, podemos mudar o formato de retorno utilizando uma função chamada CONVERT() que serve para converter um tipo de dados em outro. Quando utilizamos a função CONVERT()com datas, podemos passar um terceiro parâmetro para indicar o formato. Exemplo:
/* Mostra a data atual no formato padrão */
SELECT GETDATE()
/* Converte a data atual para caracter e mostra no formato MM/DD/AAAA */
SELECT CONVERT(CHAR,GETDATE(),101 )
/* Converte a data atual para caracter e mostra no formato AAAA.MM.DD */
SELECT CONVERT(CHAR,GETDATE(),102 )
/* Converte a data atual para caracter e mostra no formato DD/MM/AAAA */
SELECT CONVERT(CHAR,GETDATE(),103 )
/* Converte a data atual para caracter e mostra no formato MM/DD/AA */
SELECT CONVERT(CHAR,GETDATE(),1 )
/* Converte a data atual para caracter e mostra no formato AA.MM.DD
Somente os dois últimos dígitos do ano */
SELECT CONVERT(CHAR,GETDATE(),2 )
/* Converte a data atual para caracter e mostra no formato DD/MM/AA
Somente os dois últimos dígitos do ano */
SELECT CONVERT(CHAR,GETDATE(),3 )
Lembrando sempre de que, como a data vai aparecer para o usuário depende também do tratamento que a aplicação client (quem solicitou os dados) pode fazer.
Para finalizar, algumas funções úteis para o tratamento de datas:
/* Adiciona três dias na data atual */
SELECT DATEADD(DAY,3,GETDATE())
/* Diferença entre datas. Mostra quantos dias se passaram deste o começo do ano 2001 até a data atual*/
SELECT DATEDIFF(DAY,'01/01/2001',GETDATE())
/* Retorna somente o mês da data atual */
SELECT DATEPART(MONTH,GETDATE())
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
Ter 20 Jun 2017 - 12:48 por paulo.ferreira_rj
» Instalar base DEMO
Sex 2 Jun 2017 - 6:29 por akaytatsu
» Relatorio Rm reports / Holerite salario
Ter 18 Out 2016 - 8:09 por Gárgio
» DEFAULT NO CADASTRO DE FUNCIONARIOS RM LABORE
Sex 7 Out 2016 - 21:51 por mpsbrasilia
» Duvida RM Labore - Calculo Folha de Pagamento
Seg 12 Set 2016 - 15:51 por RIVALDO PAES
» Exportar Imagem do banco de dados SQL SERVER
Qui 28 Jul 2016 - 11:42 por edivan
» Consulta SQL
Qui 10 Set 2015 - 11:32 por evertonerp
» Existe Algum Demo do RM Labore???
Sex 17 Abr 2015 - 11:53 por fmsolucoes
» RM BIBLIOS
Seg 16 Fev 2015 - 7:50 por fmsolucoes