Array
(
)

Substrair Datas Convertidas

Marcio Morando
   - 19 dez 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?

Faabiianooc
   - 19 dez 2013

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.

Alex Lekao
   - 19 dez 2013

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

Marcio Morando
   - 19 dez 2013

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

Mas deu certo. Muito Obrigado pela dica.

Marcio Morando
   - 19 dez 2013

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?

Faabiianooc
   - 19 dez 2013

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)

Faabiianooc
   - 19 dez 2013

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

Alex Lekao
   - 19 dez 2013

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.

Marcio Morando
   - 19 dez 2013

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

onde eu coloco o campo que quero converter?

Alex Lekao
   - 19 dez 2013


Citação:
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

Marcio Morando
   - 19 dez 2013

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?

Faabiianooc
   - 20 dez 2013

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.