Ir para conteúdo

Arquivado

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

Acma

[Resolvido] Manipular Datas

Recommended Posts

Falaa Galeraaa!!!

 

Preciso de um help!!

 

Estou com um problema, tenho uma tabela com o campo chamado DATA, e o tipo desse campo é VARCHAR(50).

E alguns registros desse campo estão no seguinte formato, por exemplo: JAN 14 2011 12:00AM, criei um campo com o nome DATA2 do tipo DATETIME, e queria inserir nesse campo, os valores do campo DATA, porém quando vou fazer os update da erro de conversão, nesse campo DATA2, precisa ficar com esse formato: 2010-09-16 00:00:00.000

qq poderia ser feito? alguém tem uma sugestão?

 

Abrs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz, fiquei na mesma, não encontrei um exemplo parecido com o meu =\, pois na minha situação, ele grava string..

estou fazendo alguns testes aqui, vou ver se consigo resolver rs..

 

obrigado pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente isso:

 


declare @data varchar(50)
set @data = 'JAN 14 2011 12:00AM'

select @data, convert(datetime,@data,103)

 

Mas você postou a data do dia 14 e quer colocar dia 16? O_o

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falae A.Jr, blza?!

 

então,digitei errado rsrs, então, fiz o teste que me passou, retornou o seguinte erro:

Must declare the scalar variable "@data".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acma, tu declarou a variavel corretamente? O_o

qual a sua versão do SQL?

 

Tenta isso:

IF object_id('tempdb..#data') IS NOT NULL 
begin 
DROP TABLE #data 
end

create table #data (data varchar(50))

insert into #data values ('JAN 14 2011 12:00AM')

select data, convert(datetime, data,103) from #data

 

Isso são somente exemplos de como usar o convert com datetime 103

No post sobre datas tem vários exemplos.

 

Abçs

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, antes de você postar esse último exemplo, eu tava tentanto executar esse mesmo script

select data2, convert(datetime, data,103) from tabela

eh muito estranho, pq eu executo, ele aparece o grid com as datas certas e logo em seguida dá erro oO, muito sinistro, eu executei esse script que você me passou, e foi certinho, e no servidor do cliente tá dando essa zica que descrevi acima, bom, vou analisar novamente td, e ver se encontro uma solução..

 

mas até o momento muito obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acma, tem que verificar o formato das datas neste campo.

Tem algum valor que nao eh data! Tem mto registros tabela?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem mais de 3 mil registros ..

então, nesse campo, tem 2 tipos de formato inserido, que seria esse : JAN 14 2011 12:00AM e o outro AAAA-MM-DD

meu colega sugeriu pra atualizar esses registros com um while, agora vou procurar sobre while no sql rsrs, vamos a luta!!

 

Brigado mais uma vez!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria um CASEno WHERE para verificar o ano ;)

 

Tenta ai, e qq coisa duvida soh postar :P

 

Lembrei... do tipo 101 da para alterar os dois tipos... eu nao tenho ideia de como fazer isso no while.

 

IF object_id('tempdb..#data') IS NOT NULL  
begin  
DROP TABLE #data  
end 

create table #data (data varchar(50)) 

insert into #data values ('JAN 14 2011 12:00AM') 
insert into #data values ('2011-05-27') 

select data , convert(datetime, data,101) from #data 

 

:devil:

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele vai assim, de boa .. na minha máquina dá certo, agora aonde deveria dar, não vai =\ hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele vai assim, de boa .. na minha máquina dá certo, agora aonde deveria dar, não vai =\ hehe

 

 

Qual o erro agora? O_o

esta complicado hein rs

 

Tenta "setar" o formato da data:

 

Set dateformat YMD

 

antes de rodar o select

 

Acma, roda o ISDATE para ver os campos que esta com problemas:

 

SET DATEFORMAT YMD


IF object_id('tempdb..#data') IS NOT NULL   
begin   
DROP TABLE #data   
end  

create table #data (data varchar(50))  

insert into #data values ('JAN 14 2011 12:00AM')  
insert into #data values ('2011-05-27')  

select data , isdate(data) from #data 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá esse erro:

conversion failed when converting datetime from character string

dos 32 mil itens, quando eu rodei o select com o ISNULL, no resultado, 17 mil tinha como resposta =1, ou seja, era datas válidas, e o resto tudo inválido, =0, mesmo tendo o formato igual as datas que é "válida"

dá pra entender? Oo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é ISNULL, é ISDATE!

você vai ter que analisar os que tem ISDATE = 0 que são datas inválidas!

Ou força eles para NULL (UPDATE) porque pode estar no campo escrito NULL e não como valor!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa, minha cabeça tá uma pilha, correção do ultimo post:

dos 32 mil itens, quando eu rodei o select com o ISDATE, no resultado, 17 mil tinha como resposta =1, ou seja, era datas válidas, e o resto tudo inválido, =0, mesmo tendo o formato igual as datas que é "válida"

dá pra entender? Oo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Books On Line:

 

http://msdn.microsoft.com/pt-br/library/ms187347.aspx

 

Abçs

 

Pode nao ser formato, e sim algum caracter no final delas...

 

poste uma data válida e uma inválida para analisarmos

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

DATA | NO COLUMN NAMES

 

JAN 14 2011 12:00AM 1

 

JAN 14 2010 12:00AM 0

 

aparentemente idênticas!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei dar um set format em todas as variacoes mas o retorno é sempre um.... estranho...

a unica mudanca é o ano!

Compartilhar este post


Link para o post
Compartilhar em outros sites

nuss cara, estranho pra caramba..

já dei rtrim, ltrim pra limpar td, e nada .. bom, vou continuar vasculhando na net rsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

este campo eh um varchar de 50 correto?

Qual o collation do DB?

Esta rodando somente neste campo o isdate?

 

 

Abçs

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.