Conversão Unix para datetime

02/12/2014

0

Prezados
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

Lucas Souza

Responder

Posts

02/12/2014

Marisiana Battistella

Olá Lucas!
Talvez você consiga utilizar a função CONVERT(). Veja o uso dela nesse link [url]http://www.w3schools.com/sql/func_convert.asp[/url]
Responder

02/12/2014

Isaac Jose

boa tarde.. a todos.
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
Responder

03/12/2014

Marisiana Battistella

Lucas, conseguiu fazer a conversão?
Responder

03/12/2014

Lucas Souza

Olá Marisiana,

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
Responder

03/12/2014

Marisiana Battistella

Mas ali tem um exemplo, serve para converter a data e trazer a hora também...
131	 ->  dd/mm/yy hh:mi:ss:mmmAM
CONVERT(VARCHAR(24),GETDATE(),131 )
Responder

03/12/2014

Lucas Souza

Sim Marisiana,

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.
Responder

04/12/2014

Marisiana Battistella

Eu não utilizo SQLServer, mas pelo que vi nas pesquisas que fiz, pode conseguir obter o resultado desejado se utilizar o CAST ou o CONVERT.
[url]http://msdn.microsoft.com/pt-br/library/ms187928.aspx[/url]
Responder

04/12/2014

Lucas Souza

Pois é Marisiana,

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
Responder

04/12/2014

Isaac Jose

Olá Marisiana,

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.
Responder

04/12/2014

Lucas Souza

Eu entendi Isaac eu entendi o seu exemplo,

Mas e quanto as horas!? Por que fazendo desta forma eu consigo montar a data, mas a hora se perde.
Responder

04/12/2014

Isaac Jose

Eu entendi Isaac eu entendi o seu exemplo,

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.
Responder

08/12/2014

Lucas Souza

Olá pessoal,

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
Responder

08/12/2014

Marisiana Battistella

Por nada!
De algum jeito tinha que dar certo...
Parabéns!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar