Conversão Unix para datetime
02/12/2014
0
Amigos,
Possuo aqui na empresa um sistema de abertura de chamados e a chefia me pediu alguns relatórios mensais. analisando melhor a estrutura do banco, eu descobri que em todos os campos que deveriam ser do tipo datetime, eles são do tipo INT e os dados são gravados em formato Unix, então uma consulta em um campos deste o resultado é: 1031857200.
Até ai tudo bem, eu consigo transformar esse número em uma data legível conforme abaixo, porém a minha dúvida é: Como faço para o resultado abaixo vir em formato de data brasileiro?
SELECT
DATEADD(hh,-2,DATEADD(SS, open_date, '19700101')) >='2014-12-02 00:00:00'
Resultado:
2014-12-02 09:26:09.000
Sendo que o resultado desejado é:
02-12-2014 09:26:09
Como eu faço esta conversão?
Lucas Souza
Posts
02/12/2014
Marisiana Battistella
Talvez você consiga utilizar a função CONVERT(). Veja o uso dela nesse link [url]http://www.w3schools.com/sql/func_convert.asp[/url]
02/12/2014
Isaac Jose
lucas e possivel fazer essa montagem atravez de SUBSTRING. a DATA que eu tenho em uma base por exemplo esta como 17-Nov-2014 como é um campo de busca e com intuito de boas praticas eu o divido em tres .. campo dia, campo mes, campo ano. coloco tambem no inicio dos campo o seu valor com isso ao ver os mesmo ja sei qual é o mais adequado para a busca e saber o tamanho de cada um no exato momento da consulta...
segue exemplo de substring
update a
set tintMes = CASE WHEN SUBSTRING (DATA , 4,3 ) = 'JAN' then 1
WHEN SUBSTRING (DATA , 4,3 ) = 'FEV' then 2
WHEN SUBSTRING (DATA , 4,3 ) = 'MAR' then 3
WHEN SUBSTRING (DATA , 4,3 ) = 'ABR' then 4
WHEN SUBSTRING (DATA , 4,3 ) = 'MAI' then 5
WHEN SUBSTRING (DATA , 4,3 ) = 'JUN' then 6
WHEN SUBSTRING (DATA , 4,3 ) = 'JUL' then 7
WHEN SUBSTRING (DATA , 4,3 ) = 'AGO' then 8
WHEN SUBSTRING (DATA , 4,3 ) = 'SET' then 9
WHEN SUBSTRING (DATA , 4,3 ) = 'OUT' then 10
WHEN SUBSTRING (DATA , 4,3 ) = 'NOV' then 11
WHEN SUBSTRING (DATA , 4,3 ) = 'DEZ' then 12
END
from schema.tabela a
go
update a
set bintAno = CASE WHEN SUBSTRING (DATA , 8,2 ) = 14 then 2014
WHEN SUBSTRING (DATA , 8,2 ) = 15 then 2015
END
from schema.tabela a
go
update a
set tintDia = SUBSTRING ( Data ,1 , 2 )
from schema.tabela a
espero que ajude..
att
Isaac
03/12/2014
Lucas Souza
Até o momento não!
Via "Convert" eu consigo fazer a data ficar em padrão nacional, porém ele não me traz a hora. Quanto a ideia do Isaac, eu não achei uma boa ideia por que eu teria de utilizar Updates.
Estou pensando em um modo de criar uma User Function para isto.
Obrigado.
Lucas
03/12/2014
Marisiana Battistella
131 -> dd/mm/yy hh:mi:ss:mmmAM CONVERT(VARCHAR(24),GETDATE(),131 )
03/12/2014
Lucas Souza
Mas convertendo desta forma o resultado que sai pra mim é:
11/02/1436 10:42:02:000A
E sem a conversão sai assim: 2014-12-03 10:42:02.000
Por que se ele estivesse trazendo a parte do ano corretamente, eu poderia refinar o resultado usando REPLACE.
04/12/2014
Marisiana Battistella
[url]http://msdn.microsoft.com/pt-br/library/ms187928.aspx[/url]
04/12/2014
Lucas Souza
Via CAST/CONVERT não vai não, estou tentando uma solução mais "ninja" via User-Function mesmo. Dando certo eu posto aqui o resultado.
Obrigado!
Lucas
04/12/2014
Isaac Jose
Até o momento não!
Via "Convert" eu consigo fazer a data ficar em padrão nacional, porém ele não me traz a hora. Quanto a ideia do Isaac, eu não achei uma boa ideia por que eu teria de utilizar Updates.
Estou pensando em um modo de criar uma User Function para isto.
Obrigado.
Lucas
Boa tarde a todos, Lucas não falei para voce fazer Update o que eu tinha de bate pronto era esse exemplo. o SUBSTRING permite que vc pegue partes da informação e com isso vc pode montar na ordem que quizer ..
segue exemplos com uma data que tenho e cada parte que pego dela.
SELECT TOP 1 SUBSTRING(DATA,1,2) DIA, DATA from producao.Tb_AcumProd_PFPJ
SELECT TOP 1 SUBSTRING(DATA,4,3) MES ,DATA from producao.Tb_AcumProd_PFPJ
SELECT TOP 1 SUBSTRING(DATA,8,2) ANO ,DATA from producao.Tb_AcumProd_PFPJ
resultados
DIA DATA
28 28-Nov-14
MES DATA
Nov 28-Nov-14
ANO DATA
14 28-Nov-14
com isso é so vc colocar em Subselects na order que vc quer e pronto.
espero que ajude.
04/12/2014
Lucas Souza
Mas e quanto as horas!? Por que fazendo desta forma eu consigo montar a data, mas a hora se perde.
04/12/2014
Isaac Jose
Mas e quanto as horas!? Por que fazendo desta forma eu consigo montar a data, mas a hora se perde.
Lucas o substring pega a posição do campo. nao importa se é data, minu,segundo, caracter especial...
seus resultados
Resultado:
2014-12-02 09:26:09.000
SELECT TOP 1 SUBSTRING(DATA,posição inicial,tamanho) ANO ,DATA from producao.Tb_AcumProd_PFPJ
SELECT TOP 1 SUBSTRING(DATA,8,2) ANO ,DATA from producao.Tb_AcumProd_PFPJ
Sendo que o resultado desejado é:
02-12-2014 09:26:09.
é so vc ir fazendo isso tirando os Espaços , - , : e montar do jeito que deseja.
08/12/2014
Lucas Souza
Consegui resolver o problema, resolvi de uma forma bem "tosca" e não me orgulho nem um pouco disto, mas eu resolvi!
A solução veio da forma mais simples possível, eu usei o "CONVERT" para tratar a data e concatei com o mesmo campo tratando também com CONVERT a hora. Certamente existem formas mais inteligentes de se fazer este procedimento. Segue abaixo a solução!
CONVERT(CHAR(5),DATEADD(hh,-2,DATEADD(ss, open_date, '19700101')),103) + ' ' + CONVERT(CHAR(10),DATEADD(hh,-2,DATEADD(ss, open_date, '19700101')),108) [DT_ABERTURA],
CONVERT(CHAR(5),DATEADD(hh,-2,DATEADD(ss, close_date, '19700101')),103) + ' ' + CONVERT(CHAR(10),DATEADD(hh,-2,DATEADD(ss, open_date, '19700101')),108) [DT_FECHAMENTO],
Obrigado mesmo por todo apoio.
Lucas
08/12/2014
Marisiana Battistella
De algum jeito tinha que dar certo...
Parabéns!
Clique aqui para fazer login e interagir na Comunidade :)