Substrair Datas Convertidas

19/12/2013

Bom Dia Pessoal,

Estou fazendo o seguinte comando:

CONVERT(nvarchar(10),DataExpedicao, 103) AS DataExpedicao,
CONVERT(nvarchar(10), Inicio, 103) DataInicio,

e está me trazendo as datas do formato que preciso. Agora preciso subtrair estas duas datas.
Tentei utilizar o DATEDIFF, mas não consegui acerta a sintaxe eu acho.
Como devo proceder?

Marcio Morando

Respostas

19/12/2013

Fabiano Carvalho

Evite usar NVARCHAR, ele ocupa o dobro de espaço.

Sem converter utilize.

select datediff(day,data_1,data_2)

Se quiser a data que daria, faça

select dateadd(day, - datediff(day,data_1,data_2),data_2)

Acho que deve funcionar.
Responder Citar

19/12/2013

Alex Lekao

Oi Boa tarde!!!

Vc quer que parte das datas?

talvez nem precise usar o datediff, vc pode usar a conversao que ja esta usando, acredito que seja possivel, nao me lembro de ter feito diferente. rsrsr
Responder Citar

19/12/2013

Marcio Morando

Beleza Fabiano Carvalho. Acabei tendo que fazer uns calculos para trazer hora separada também.

Mas deu certo. Muito Obrigado pela dica.
Responder Citar

19/12/2013

Marcio Morando

Pessoal, fiz estas duas consultas:

CONVERT(varchar(10), Inicio, 103) DataInicio,CONVERT(CHAR(8), Inicio, 8 ) AS HoraInicio,
CONVERT(CHAR(8), DataExpedicao, 8 ) HoraExpedicao,

que são dois campos DATETIME e eu converti para pegar somente a hora em 00:00:00.

Mas preciso converter isso para INTEGER agora, para escrever em outra tabela, mas não estou conseguindo converter com o CAST.

Alguma sugestão de como devo fazer?
Responder Citar

19/12/2013

Fabiano Carvalho

tem que converter pra float

select cast(getdate() as float)

Outra coisa, não faça "gambiarra".
Utilize o exemplo abaixo para obter somente a hora no padrao 00:00:00
Select convert(varchar(8),getdate(),108)
Responder Citar

19/12/2013

Fabiano Carvalho

Ou então, deixe em segundos (inteiros), e depois converta para dias quando for consultar.
Responder Citar

19/12/2013

Alex Lekao

Oi Marcio, boa tarde!!!

nao entendi direito, vc precisa que as horas aparecem em inteiro?

acho que o datediff nao ja lhe de isso.

posso dar uma olhada aqui em alguns codigos que usei para tratamento de datas e horas e postar aqui para vc analisar e ver se te ajuda.
Responder Citar

19/12/2013

Marcio Morando

Select convert(varchar(8),getdate(),108)

onde eu coloco o campo que quero converter?
Responder Citar

19/12/2013

Alex Lekao

Select convert(varchar(8),getdate(),108) onde eu coloco o campo que quero converter?


substitui o getdate() pelo campo, o getdate() foi so de exemplo... rsrsr
Responder Citar

19/12/2013

Marcio Morando

CONVERT(varchar(8),Inicio,108) as HoraInicio,
CONVERT(varchar(8),DataExpedicao,108) as HoraExpedicao,

Deixei os dois campos assim.

Agora preciso converter para INTEGER.
Fabiano, tentei converter para FLOAT, mas da erro também.

sintaxe ---> CAST(CONVERT(varchar(8),Inicio,108)AS INTEGER) as HoraInicio,

Onde está o erro?
Responder Citar

20/12/2013

Fabiano Carvalho

converta o datetime para float

As horas do windows estão em float
tente esse exemplo.

select cast(getdate() as float)

A coluna que ira receber tambem precisa estar em float para não faltar casas decimais.

e para retornar o float para datetime basta converte-lo para datetime. Se quiser converter segundos para datetime, converta eles para dias.

Exemplo, 2 segundos em dias é o mesmo que 2.0 / 86400

86400 segundos tem em um dia.

Tenta ai e retorne.
Responder Citar