Converter um texto para uma data em DB2
estou a tentar trabalhar com datas DB2, mas os dados são armazenados como uma string na base de dados DB2.
Eu quero converter esta data-string em uma data real, de preferência deixando o tempo fora porque eu quero todas as transações entre 1 de Janeiro de 2011 e 26 de Janeiro de 2011.
Então, essencialmente, quero esta declaração de MS SQL na magia DB2...CONVERT(datetime,SETTLEMENTDATE.VALUE,103)
para o fundo, cheguei até ao ponto como
CAST(SETTLEMENTDATE.VALUE, DATE)
e
DATE(SETTLEMENTDATE.VALUE)
Mas preciso do conhecimento de um DB2 whizzkid!
Obrigado.
5 answers
'DD/MM/YYYY HH:MI:SS'
Os separadores reais entre Dia/Mês/Ano não importam, nem nada que venha depois do ano.
Você não diz que versão do DB2 você está usando ou em que plataforma ele está rodando, então eu vou assumir que ele está no Linux, UNIX ou Windows.
Quase qualquer versão recente do DB2 para Linux / UNIX / Windows( 8.2 ou mais tarde, possivelmente até versões mais antigas), você pode fazer isto usando a função TRANSLATE
:
select
date(translate('GHIJ-DE-AB',column_with_date,'ABCDEFGHIJ'))
from
yourtable
Com esta solução não importa o que vem depois da data na sua coluna.
Em DB2 9, 7, Você também pode usar a função TO_DATE
(semelhante ao TO_DATE da Oracle):
date(to_date(column_with_date,'DD-MM-YYYY HH:MI:SS'))
Isto requer que os seus dados correspondam ao texto de formatação; é mais fácil de entender ao olhar para ele, mas não tão flexível como a opção Traduzir.
'YYYMMDD'
Por exemplo:
Dt
20151104
Então eu tentei seguir para obter o resultado desejado.
select cast(Left('20151104', 4)||'-'||substring('20151104',5,2)||'-'||substring('20151104', 7,2) as date) from SYSIBM.SYSDUMMY1;
Adicionalmente, Se quiser executar a pesquisa do servidor ligado ao MS SQL ao DB2(para mostrar apenas 100 linhas).
SELECT top 100 * from OPENQUERY([Linked_Server_Name],
'select cast(Left(''20151104'', 4)||''-''||substring(''20151104'',5,2)||''-''||substring(''20151104'', 7,2) as date) AS Dt
FROM SYSIBM.SYSDUMMY1')
Resultado após a consulta acima:
Dt
2015-11-04
Espero que isto ajude os outros.
DATE(substr(SETTLEMENTDATE.VALUE,7,4)||'-'|| substr(SETTLEMENTDATE.VALUE,4,2)||'-'|| substr(SETTLEMENTDATE.VALUE,1,2))
Ainda aceitarei respostas melhores que esta.
Na função de formato, pode usar a função timestamp_ format. Exemplo, se o formato é AAAAMMDD você pode fazê-lo:
select TIMESTAMP_FORMAT(yourcolumnchar, 'YYYYMMDD') as YouTimeStamp
from yourtable
Você poderá então adaptar o formato com os elementos formatáveis aqui
Pode usar:
select VARCHAR_FORMAT(creationdate, 'MM/DD/YYYY') from table name