Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Morpheus#2005

Problema com datas.

Recommended Posts

Um Salve a todos ...

 

 

Por favor, gostaria de algumas explicações, quem puder me responder ficarei grato ...

 

Sobre datas : Em um banco da dados, qualo melhor formato para guardar datas :

 

Char , nchar,varchar,nvarchar,datetime

 

O pq desta pergunta ?

 

Eu tenho aqui em meu banco (SQL SERVER) algumas datas e elas estão em um com o formato CHAR.

 

Bem quando eu faço qualquer coisa em relação a busca entre datas ou uma busca simples .. da maior trabalho.. e agora eu estou querendo fazer esta busca tipo, somente o mês de fevereiro... e não consigo de jeito nenhum..

 

ALGUÉM PODE ME AJUDAR ???

 

Busca entre datas ::

 

SELECT TOP 100 PERCENT CONVERT(datetime, Data_Abertura, 103) AS Tudo, *

FROM dbo.backoffice_geral

WHERE (Data_Abertura BETWEEN '01/03/2005' AND '30/03/2005')

ORDER BY Data_Abertura DESC

 

****mas ele me retorna até o mês 4 que eu não pedi ....

 

 

 

Então ficam essas perguntas no ar ?

 

 

Como posso fazer a busca pelo mês... ?

Como posso fazer a busca entre datas ?

Qual a melhor forma de guardar DATAS ?

 

 

Obrigado a todos e tenho certeza q essa minha dúvida é a dúvida de muitos outros..

 

:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

como disse o kdu melhor tipo datetime e pra pesquisar por mes use monthjá pra pesquisar entre datas é melhor usar between...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um Salve a todos ...

 

 

Por favor, gostaria de algumas explicações, quem puder me responder ficarei grato ...

 

Sobre datas : Em um banco da dados, qualo melhor formato para guardar datas :

 

Char , nchar,varchar,nvarchar,datetime

 

O pq desta pergunta ?

 

Eu tenho aqui em meu banco (SQL SERVER) algumas datas e elas estão em um com o formato CHAR.

 

Bem quando eu faço qualquer coisa em relação a busca entre datas ou uma busca simples .. da maior trabalho.. e agora eu estou querendo fazer esta busca tipo, somente o mês de fevereiro... e não consigo de jeito nenhum..

 

ALGUÉM PODE ME AJUDAR ???

 

Busca entre datas ::

 

SELECT     TOP 100 PERCENT CONVERT(datetime, Data_Abertura, 103) AS Tudo, *

FROM         dbo.backoffice_geral

WHERE     (Data_Abertura BETWEEN '01/03/2005' AND '30/03/2005')

ORDER BY Data_Abertura DESC

 

****mas ele me retorna até o mês 4 que eu não pedi ....

 

 

 

Então ficam essas perguntas no ar ?

 

 

Como posso fazer a busca pelo mês... ?

Como posso fazer a busca entre datas ?

Qual a melhor forma de guardar DATAS ?

 

 

Obrigado a todos e tenho certeza q essa minha dúvida é a dúvida de muitos outros..

 

:D

<{POST_SNAPBACK}>

Para tudo.

Colega, me desculpe, não sei se o sistema do qual você está falando é comercial ou não, mas se eu fosse o seu cliente estaria tirando os cabelos.

 

Mas vamos em frente.

 

Toda vez que nos deparamos com datas, seja em SQL ou seja em Access, os programadores com menos experiência, podem acabar levando alguns golpes.

 

Vamos começar com o Access.

 

Inicialmente o Access permite a utilização de vários formatos de datas, quais sejam: Data Geral, Data Completa, Data Normal, Data Abreviada, Hora Completa, Hora Normal e Hora Abreviada. Certo ?....Errado.

 

O Access permite sim a utilização de várias formas de visualização de datas, entretanto, a única data que ele realmente guarda, é no formato MM/DD/AAAA HH:MM:SS, quem já trabalhou com datas no Access sabe do que estou falando, afinal, esta é a única forma que você consegue fazer uma consulta através das mais variadas linguagens, inclusive o ASP. (Tomem muito cuidado com as opções regionais do windows, pois o Access sofre diretamente com o que ficou ali configurado)

 

Access possui ainda algumas funções que nos auxiliam nas consultas, e as mais utilizadas são:

 

Day() = Retorna o dia da data

Month() = Retorna o mes da data

Year() = Retorna o ano data

Hour() = Retorna a hora da data

Minute() = Retorna o minuto da data

Second() = Retorna o segundo da data

 

Sem contar com as expressões mais amigas do programador ">" e "<", sinas de maior e menor.

 

Sabendo, então, que o access possui estas funções de datas(Além de outras), como faríamos para pesquisar uma data exata num banco de dados ?

 

Por exemplo:

Select * from MyTable where dt_cadastro = "#MM/DD/AAAA#"
É isso mesmo, no access nos temos que mandar o mes antes que o dia, senão, a consulta não vai funcionar. E para que isto ocorra temos que nos valer de funções internas do próprio ASP como Day() , Month() e Year().....Como é ? temos as mesmas funções no Access e no ASP ?...Sim.. é isto mesmo, por um acaso, as funções tem o mesmo nome.

 

Agora o poderoso (nem tanto assim) SQLServer:

 

Neste caso sim temos várias formas de guardarmos nossas datas, entretanto, na maioria delas e cuja a forma falarei aqui (Server Collation: Latin1_General_CI_AS) a data é guardada da seguinte forma:

 

YYYY-MM-DD HH:MM:SS.mmm

 

Isto no formato de data "DATETIME", temos també o formato "SmallDateTime", que nada mais é que uma data reduzida, que não guarda a informações dos milisegundos, ou seja,os tres ultimos "mmm", da data acima apresentada.

 

No SQL, além das funções que apresentei no ACCESS temos ainda, as funções Convert() e Cast() que são utilizadas para converter formatos de datas. O SQL possui várias formas de pesquisa, data americana, data reduzida, etc., mas, para quem não quer errar eu tenho a solução:

 

Utilize o mesmo formato do banco, ou seja, yyyy-mm-dd hh:mm.ss.mmm, e vocês me peguntariam...Como ?, se o usuário digita a data no formato brasileiro, dd/mm/aa.

 

Ora Srs. lembram das funções ASP, que possuiam tanto no Access quanto no ASP, então, vamos criar tratamentos....Quando utilizarem datas como critério de pesquisa, passem as datas por uma tratativa, que pode ser como a que está abaixo.

 

Function MontaDataSQL(strDATA)If IsDate(strDATA) Then    MontaDataSQL = Year(strDATA) & "-" & Right("00" & Month(strDATA), 2) & "-" & _                    Right("00" & Day(strDATA), 2) & " " & Right("00" & Hour(strDATA), 2) & ":" & _                    Right("00" & Minute(strDATA), 2) & ":" & Right("00" & Second(strDATA), 2) & ".000"Else    MontaDataSQL = NullEnd IfEnd Function
Para respoder exatamente o que foi perguntado, aí vai:

 

Pergunta1:

Select * from MyTable where Month(Data)=1

 

Pergunta2:

Select * from MyTable where Data > @dt_ini and Data <@dt_fim

 

Pergunta3:

Acho que respondi com o texto acima.

 

 

Falow !!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom conforme o mebkopcznski respondeu as datas são guardadas no formato mes/dia/ano no access correto, mas como quando eu insiro pelo asp no formato Date ele insere a data como dia/mes/ano?E se o usuário ter que digitar a data.como eu vo converter para mes/dia/ano???

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.