Fórum Ajuda com SQL #57120

23/10/2006

0

Pessoal,

Tenho um campo TDate e preciso atualizar o Ano de vencimento.
Como posso atualizar apenas o campo Ano e manter os outros campos como Dia e Mes?

Obrigado.


Yallebr

Yallebr

Responder

Posts

23/10/2006

Tiagorocha

Dê uma olhada em: Unit DateUtils -> IncYear, IncMonth, IncDay


Responder

Gostei + 0

23/10/2006

Delmar

Uma outra possibilidade é tentar compor uma data com o dia e mes da data anterior e ler em um novo campo apenas o ano:

veja se estes trechos de códigos podem lhe ajudar, eu não adaptei nada mas serve de exemplo para ver como pegar apenas o dia e o mês e ir concatenando


nataEscolarImpPaisagemSem1.QRmemo1.Lines.Text:=´AO(S) ´+formatdatetime(´dd´, DateTimePicker1.Date)+´ DIA(S) DO MÊS DE ´+ Ansiuppercase(formatdatetime(´mmmmm´, DateTimePicker1.Date))+ ´ DE ´+formatdatetime(´yyyy´, DateTimePicker1.Date)+´ CONCLUIU-SE....´;
nataEscolarImpPaisagemSem1.QRLabel1.Caption:=dmc.QescolaPadraocidade.AsString+´/´+dmc.QescolaPadraouf.AsString+ ´ ´+formatdatetime(´dd´, date())+´ DE ´+ Ansiuppercase(formatdatetime(´mmmmm´, date()))+ ´ DE ´+formatdatetime(´yyyy´, date());


Responder

Gostei + 0

24/10/2006

Yallebr

Pessoal desculpa,

Me expressei muito mal, gostaria de fazer isso utilizando SQL. Utilizo FB 1.5

Obrigado


Responder

Gostei + 0

24/10/2006

Tiagorocha

Certo... nesse caso você vai precisar instalar uma biblioteca UDF no teu Firebird... eu particularmente uso a TBUDF, que tem uma função chamada UDF_INCMONTH que resolve esse problema de maneira bastante prática.
Se cadastra no site Firebase (www.firebase.com.br) e procura a TBUDF na seção de Downloads (http://www.firebase.com.br/fb/downloads.php?id=14).


Responder

Gostei + 0

24/10/2006

Adriano Santos

Como posso atualizar apenas o campo Ano e manter os outros campos como Dia e Mes?


Como assim ´CAMPO´ e manter os outros os outros campos como dia e mes? Não entendi.


Responder

Gostei + 0

25/10/2006

Yallebr

Olá Adriano,

Tenho um campo chamado Data do time Date.

Eu tenho N registros assim
01/01/2005
01/02/2005
01/03/2005
15/04/2005
....
....

Eu quero manter o Dia e o Mes. e trocar isso para assim:
01/01/200[b:b8ddfe7eb8]6[/b:b8ddfe7eb8]
01/02/200[b:b8ddfe7eb8]6[/b:b8ddfe7eb8]
01/03/200[b:b8ddfe7eb8]6[/b:b8ddfe7eb8]
15/04/200[b:b8ddfe7eb8]6[/b:b8ddfe7eb8]
....
....

Tipo um IncYear porém em SQL. Obrigado.


Responder

Gostei + 0

25/10/2006

Motta

Vc tem de saber as funcoes de manipulacaom de data
no Oracle ficaria algo assim :

select to_date(to_char(sysdate,´dd´) || to_char(sysdate,´mm´) || ´2013´,´ddmmyyyy´)
from dual


o to_char extraí o dia ou mes da data do sistema
2013 é um constante e to_date reconverte para data
(passando o formato)

seria traduzir estas funcoes para ib


Responder

Gostei + 0

26/10/2006

Adriano Santos

Vc tem de saber as funcoes de manipulacaom de data no Oracle ficaria algo assim :
select to_date(to_char(sysdate,´dd´) || to_char(sysdate,´mm´) || ´2013´,´ddmmyyyy´)
from dual
o to_char extraí o dia ou mes da data do sistema 2013 é um constante e to_date reconverte para data (passando o formato) seria traduzir estas funcoes para ib



Ahhhhhhhh entendi, pow eu tava tentando fazer exatemante isso pra IB/FB [b:fd13062607]Motta[/b:fd13062607], ainda não consegui.


Responder

Gostei + 0

26/10/2006

Motta

Sei que EXTRACT separa ano mes e dia, e CAST permite reconverter para data , mas não sei a sintaxe correta.


Responder

Gostei + 0

26/10/2006

Adriano Santos

Sei que EXTRACT separa ano mes e dia, e CAST permite reconverter para data , mas não sei a sintaxe correta.


Eu vou montar aqui, tava usando Extract, mas num sabia como usar o Cast. Acho que já sei como fazer.


Responder

Gostei + 0

26/10/2006

Tiagorocha

Sintaxe do Cast:
CAST(CAMPO AS TIPO)



Responder

Gostei + 0

26/10/2006

Adriano Santos

Consegui,

Fiz o teste aqui e funcionou:

UPDATE MINHA_TABELA SET
   MINHA_TABELA.MEU_CAMPO_DATA =
     (CAST(CAST(EXTRACT(DAY FROM MINHA_TABELA.MEU_CAMPO_DATA) AS INTEGER) AS INTEGER) || ´/´ ||
      CAST(CAST(EXTRACT(MONTH FROM MINHA_TABELA.MEU_CAMPO_DATA) AS INTEGER) AS INTEGER) || ´/´ ||
      CAST(CAST(EXTRACT(YEAR FROM (MINHA_TABELA.MEU_CAMPO_DATA +365)) AS INTEGER) AS INTEGER))
WHERE
  EXTRACT(YEAR FROM MINHA_TABELA.MEU_CAMPO_DATA) = 2002


Repare o [b:6df32f3409]+365[/b:6df32f3409]. Estou adicionando 365 dias ao ano, ou seja, + 1 ano.

Talvez com base nisso a galera consiga ver algo mais fácil.
Fui


Responder

Gostei + 0

27/10/2006

Tiagorocha

[quote:dd3f78b594=´Adriano Santos´]Consegui,
Repare o [b:dd3f78b594]+365[/b:dd3f78b594]. Estou adicionando 365 dias ao ano, ou seja, + 1 ano.

Talvez com base nisso a galera consiga ver algo mais fácil.
Fui[/quote:dd3f78b594]

Que tal assim:
SELECT
CAST(CAST(EXTRACT(DAY FROM CURRENT_DATE) AS INTEGER) AS INTEGER)||´/´||
CAST(CAST(EXTRACT(MONTH FROM CURRENT_DATE) AS INTEGER) AS INTEGER)||´/´||
CAST(CAST(EXTRACT(YEAR FROM (CURRENT_DATE))+1 AS INTEGER) AS INTEGER)
FROM RDB$DATABASE


Parabéns Adriano, o negócio é trabalhoso, mas é muito legal a idéia!


Responder

Gostei + 0

27/10/2006

Adriano Santos

[quote:c360bb90cd=´Adriano Santos´]Consegui, Repare o [b:c360bb90cd]+365[/b:c360bb90cd]. Estou adicionando 365 dias ao ano, ou seja, + 1 ano. Talvez com base nisso a galera consiga ver algo mais fácil. Fui


Que tal assim:
SELECT
CAST(CAST(EXTRACT(DAY FROM CURRENT_DATE) AS INTEGER) AS INTEGER)||´/´||
CAST(CAST(EXTRACT(MONTH FROM CURRENT_DATE) AS INTEGER) AS INTEGER)||´/´||
CAST(CAST(EXTRACT(YEAR FROM (CURRENT_DATE))+1 AS INTEGER) AS INTEGER)
FROM RDB$DATABASE

[/quote:c360bb90cd]

Intão [b:c360bb90cd]ThiagoRocha[/b:c360bb90cd] pelo que entendi o [b:c360bb90cd]yallebr[/b:c360bb90cd] tem um campo na tabela que precisa ser acrescentado um ano, por isso fiz o esquema para adicionar 365 dias (1 ano).

O Tenho um campo TDate e preciso atualizar o Ano de vencimento.


O [b:c360bb90cd]CURRENT_DATE[/b:c360bb90cd] date vai adicionar 1 ano a data atual certo? Num sei, depende do que ele precisa. Se for como eu falei o meu esquema vai funcionar perfeitamente, porém ele pode ter uma tipo que o vencimento seja 2005 e vai ser mudada para 2006, ainda vai ficar errado rsrs...

Resumindo: os dois modos funcionam, valeu por ajudar tb. Agora ele escolhe o método que melhor se encaixa com a necessidade.

Parabéns Adriano, o negócio é trabalhoso, mas é muito legal a idéia!


Opa, obrigado.


Responder

Gostei + 0

27/10/2006

Tiagorocha

É isso aí Adriano, vc postou o código que atualiza a tabela avançando a data original em um ano. Para isso você somou 365 dias na data original.

Eu postei um código que eu estava usando ontem para testar a função EXTRACT, corrigido com base nas informações do código que você postou.

Meu código simplesmente exibe a data atual do sistema incrementada em um ano, somando 1 ao ano após este haver sido extraído pela função EXTRACT. Só isso, sem pretensão nenhuma de ser ´melhor´ que o seu, hehehe :P


Responder

Gostei + 0

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

Aceitar