Converter um texto para uma data em DB2

Estou a trabalhar com uma base de dados DB2 pela primeira vez.

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.
Author: user75525, 2011-01-31

5 answers

Com base na tua resposta, Acho que a tua coluna tem dados formatados assim.
'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.

 15
Author: Ian Bjorhovde, 2011-01-31 18:19:03
Conheço o seu antigo posto, mas ainda assim quero contribuir. Acima não vai funcionar se você tiver formato de dados como este
'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.
 5
Author: Denn, 2016-06-12 17:28:39
Está bem, parece-me uma invasão. Eu tenho que trabalhar usando uma substring, de modo que apenas a parte da string com a data (não a hora) passa para a função DATE...
DATE(substr(SETTLEMENTDATE.VALUE,7,4)||'-'|| substr(SETTLEMENTDATE.VALUE,4,2)||'-'|| substr(SETTLEMENTDATE.VALUE,1,2))
Ainda aceitarei respostas melhores que esta.
 0
Author: user75525, 2011-01-31 15:43:28

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

 0
Author: Esperento57, 2018-03-17 11:06:06

Pode usar:

select VARCHAR_FORMAT(creationdate, 'MM/DD/YYYY') from table name
 -3
Author: ashok rana, 2015-01-09 11:07:18