Pessoal temos uma amostra de dados de um sistemas (ADABAS)da década de 1970 e como este banco é hierárquico e não havia critica, foi trabalhando ate os dias de hoje, por exemplo ao fazer um cadastro temos registros com datas e mês e ano invertidos.
exemplo MM/DD/YYYY
YYYY/MM/DD
MM/DD/YYYY
DD/YYYY/MM
Lembrando que estes dados foram exportados para textos separado por ; e foram importados para um banco de dados oracle com tipos de dados todos varchar, inclusive estes campo com datas. Como poderei fazer um cursor que ajusta estes campos e inseri em outra tabela já normalizada?.
cursor para corrigir datas com mês dias e ano invertido
-
- Rank: Estagiário Sênior
- Mensagens: 9
- Registrado em: Qui, 02 Dez 2010 10:32 pm
- Localização: cuiaba
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
Olá,
Teoricamente não precisa de cursor. Se seus dados estiverem sempre com um padrão , um mero update pode resolver seu problema.
O problema , segundo relatado , é que tens 3 padrões diferentes(pegando a data de hoje como exemplo):
YYYY/MM/DD (2014/03/06)
MM/DD/YYYY (03/06/2014)
DD/YYYY/MM (06/2014/03)
Se forem apenas esses os padrões de data fica razoável realizar o update.
Você pode diferenciar cada padrão pelas posições do "/", em cada padrão desse o ANO fica ou no inicio ou no fim ou no meio.
Agora é importante identificar corretamente cada padrão antes de realizar o ajuste.
Se tiver 2 padrões como:
DD/MM/YYYY
MM/DD/YYYY
Aí tem-se um problema, pois não dá para dizer se certa data é mês/dia ou dia/mês.
Após identificado tudo basta um update
Pode Identificar os padrões com INSTR ou SUBSTR (exemplo do "DD/YYYY/MM"):
INSTR
SUBSTR
Teoricamente não precisa de cursor. Se seus dados estiverem sempre com um padrão , um mero update pode resolver seu problema.
O problema , segundo relatado , é que tens 3 padrões diferentes(pegando a data de hoje como exemplo):
YYYY/MM/DD (2014/03/06)
MM/DD/YYYY (03/06/2014)
DD/YYYY/MM (06/2014/03)
Se forem apenas esses os padrões de data fica razoável realizar o update.
Você pode diferenciar cada padrão pelas posições do "/", em cada padrão desse o ANO fica ou no inicio ou no fim ou no meio.
Agora é importante identificar corretamente cada padrão antes de realizar o ajuste.
Se tiver 2 padrões como:
DD/MM/YYYY
MM/DD/YYYY
Aí tem-se um problema, pois não dá para dizer se certa data é mês/dia ou dia/mês.
Após identificado tudo basta um update
set campo_data = to_date(data_texto,'DD/YYYY/MM')
INSTR
INSTR('01/1230/12','/',1) = 3
AND INSTR('01/1230/12','/',4) = 8
SUBSTR('01/1230/12',3,1) = '/'
AND SUBSTR('01/1230/12',8,1) = '/'
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
Lembrando ainda que podes realizar a identificação de padrão com expressões regulares:
Ou seja, caso tenha o padrão '99/9999/99', onde 9 representa decimal.
REGEXP_LIKE ('01/1230/12', '^\d{2}/\d{4}/\d{2}$')
-
- Rank: Estagiário Sênior
- Mensagens: 9
- Registrado em: Qui, 02 Dez 2010 10:32 pm
- Localização: cuiaba
Opa, valeu obrigado, vou testar e assim que puder eu retorno.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Bing [Bot] e 5 visitantes