FM SOLUÇÕES - (31) 3761-3490
Seja bem vindo ao Fórum FM Soluções!!

Aqui você poderá postar suas dúvidas, experiências e ainda baixar e postar roteiros e tutoriais não oficiais sobre os módulos da RM Sistemas.

E ainda, conhecer um pouco sobre os nossos produtos e serviços!!!

Participe do fórum, é rápido e fácil

FM SOLUÇÕES - (31) 3761-3490
Seja bem vindo ao Fórum FM Soluções!!

Aqui você poderá postar suas dúvidas, experiências e ainda baixar e postar roteiros e tutoriais não oficiais sobre os módulos da RM Sistemas.

E ainda, conhecer um pouco sobre os nossos produtos e serviços!!!
FM SOLUÇÕES - (31) 3761-3490
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Procurar
 
 

Resultados por:
 


Rechercher Pesquisa avançada

Últimos assuntos
» Consulta SQL Banco RM
Trabalhando com Datas EmptyTer 20 Jun 2017 - 12:48 por paulo.ferreira_rj

» Instalar base DEMO
Trabalhando com Datas EmptySex 2 Jun 2017 - 6:29 por akaytatsu

» Relatorio Rm reports / Holerite salario
Trabalhando com Datas EmptyTer 18 Out 2016 - 8:09 por Gárgio

» DEFAULT NO CADASTRO DE FUNCIONARIOS RM LABORE
Trabalhando com Datas EmptySex 7 Out 2016 - 21:51 por mpsbrasilia

» Duvida RM Labore - Calculo Folha de Pagamento
Trabalhando com Datas EmptySeg 12 Set 2016 - 15:51 por RIVALDO PAES

» Exportar Imagem do banco de dados SQL SERVER
Trabalhando com Datas EmptyQui 28 Jul 2016 - 11:42 por edivan

» Consulta SQL
Trabalhando com Datas EmptyQui 10 Set 2015 - 11:32 por evertonerp

» Existe Algum Demo do RM Labore???
Trabalhando com Datas EmptySex 17 Abr 2015 - 11:53 por fmsolucoes

» RM BIBLIOS
Trabalhando com Datas EmptySeg 16 Fev 2015 - 7:50 por fmsolucoes

Galeria


Trabalhando com Datas Empty
Navegação
 Portal
 Índice
 Membros
 Perfil
 FAQ
 Buscar
Parceiros & Clientes FM Soluções

Trabalhando com Datas

Ir para baixo

Trabalhando com Datas Empty Trabalhando com Datas

Mensagem por fmsolucoes Dom 3 Jan 2010 - 7:34

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())
fmsolucoes
fmsolucoes
Admin

Mensagens : 292
Pontos : 613
Data de inscrição : 17/07/2009
Idade : 46
Localização : Conselheiro Lafaiete

http://www.fmsolucoeserp.com.br

Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos