Ir para conteúdo

Arquivado

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

andreia_sp

Converter varchar pra datetime

Recommended Posts

agora me expliquem... como pode se a data é valida??

 

obrigada[/color]

Olá Andréia, td beleza?

 

sim exprico... (pelo menos vou tentar)

mas antes vamos voltar ao tempo, sexta-feira 17:55...rsssss

vortei

 

"RTA Recurso Tecnologico Alternativo"... um nome mais sensual pra nossa querida "gambi"...rssssss

 

Andreia tenta fazer o skema que o jothaz disse e setar a conexão para DMY

 

 

abraços pessoas bom fim de semana................... e um brinde a sexta-feira http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif

Note essa frase "Andreia tenta fazer o skema que o jothaz disse e setar a conexão para DMY"

 

vamos lá, disse isso pq. o sql server por padrão de instalação usa para datas o formato americano MDY (mês/dia/ano), desta forma

18/10/2007, mes 18 ele não vai achar

 

mas se mudarmos para DMY (dia/mês/ano) pradão brasileiro, dai ele vai achar....hehehe

 

usando o exemplo acima do jothaz:

SET DATEFORMAT MDY --coloquei aqui para melhor entendimento, mas por padrão qdo. abre uma conexão, já é assim--CRIANDO MASSA PARA TESTCREATE TABLE #TMP (DAT VARCHAR(25))INSERT INTO #TMP (DAT) VALUES ('02/12/2007')INSERT INTO #TMP (DAT) VALUES ('03/03/2007')INSERT INTO #TMP (DAT) VALUES ('18/10/2007') -- DATA INVALIDA, pq. estamos em MDYSELECT * FROM #TMPORDER BY CONVERT(DATETIME,DAT)DROP TABLE #TMP[code]vai gerar o erro[quote]Server: Msg 242, Level 16, State 3, Line 11The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.[/quote]
pq. o sql entende que os dois primeiros é mês, desta forma 18 não é mês e gera o erro

 

 

mas....

se setarmos a conexão para DMY

SET DATEFORMAT dmy--CRIANDO MASSA PARA TESTCREATE TABLE #TMP (DAT VARCHAR(25))INSERT INTO #TMP (DAT) VALUES ('02/12/2007')INSERT INTO #TMP (DAT) VALUES ('03/03/2007')INSERT INTO #TMP (DAT) VALUES ('18/10/2007')  -- DATA OK, pq. estamos em DMYSELECT * FROM #TMPORDER BY CONVERT(DATETIME,DAT)DROP TABLE #TMP
não irá gerar nenhum erro, pq. agora avisamos o sql que os dois primeiros são dia, então 18 é valido

 

 

 

resumo: trabalhar com datas no sql é chato msm..rssss

 

boa semana galega,

beijos e abraços

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

beleza eriva_br com sempre positivo operante.

 

Acho que é por ai mesmo.

 

Na verdade trabalhar com tadas é osso agora com data em foramto VARCHAR ai complica mais ainda.

 

Vamos ver se tudo se resolve.

 

Doce andreia_sp caso seu problema seja resolvido post ai para que matar a curiosidade da galera (afinal são 143 visualizaçoes).

Compartilhar este post


Link para o post
Compartilhar em outros sites

eheheeh claro, importante postar o resultado!!

 

funcionou direitinho, a solução:

 

SET DATEFORMAT dmy
SELECT * FROM tabela ORDER BY CONVERT(DATETIME,DATA)

 

Acho que vale a pena ressaltar que usem datetime pra data/hora... varchar/char não!!!

 

 

Muuuuuito obrigada aos dois - jothaz e eriva_br, voces foram um anjo =*****

Compartilhar este post


Link para o post
Compartilhar em outros sites

eheheeh claro, importante postar o resultado!!

 

funcionou direitinho, a solução:

 

SET DATEFORMAT dmy
SELECT * FROM tabela ORDER BY CONVERT(DATETIME,DATA)

 

Acho que vale a pena ressaltar que usem datetime pra data/hora... varchar/char não!!!

 

 

Muuuuuito obrigada aos dois - jothaz e eriva_br, voces foram um anjo =*****

funcionou blzera, muito bom, já tava virando uma novela...rsssss :lol:

t+

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.