Ajuda com SQL
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.
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
Curtidas 0
Respostas
Tiagorocha
23/10/2006
Dê uma olhada em: Unit DateUtils -> IncYear, IncMonth, IncDay
GOSTEI 0
Delmar
23/10/2006
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());
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());
GOSTEI 0
Yallebr
23/10/2006
Pessoal desculpa,
Me expressei muito mal, gostaria de fazer isso utilizando SQL. Utilizo FB 1.5
Obrigado
Me expressei muito mal, gostaria de fazer isso utilizando SQL. Utilizo FB 1.5
Obrigado
GOSTEI 0
Tiagorocha
23/10/2006
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).
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).
GOSTEI 0
Adriano Santos
23/10/2006
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.
GOSTEI 0
Yallebr
23/10/2006
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.
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.
GOSTEI 0
Motta
23/10/2006
Vc tem de saber as funcoes de manipulacaom de data
no Oracle ficaria algo assim :
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
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
GOSTEI 0
Adriano Santos
23/10/2006
Vc tem de saber as funcoes de manipulacaom de data
no Oracle ficaria algo assim :
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
select to_date(to_char(sysdate,´dd´) || to_char(sysdate,´mm´) || ´2013´,´ddmmyyyy´) from dual
Ahhhhhhhh entendi, pow eu tava tentando fazer exatemante isso pra IB/FB [b:fd13062607]Motta[/b:fd13062607], ainda não consegui.
GOSTEI 0
Motta
23/10/2006
Sei que EXTRACT separa ano mes e dia, e CAST permite reconverter para data , mas não sei a sintaxe correta.
GOSTEI 0
Adriano Santos
23/10/2006
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.
GOSTEI 0
Tiagorocha
23/10/2006
Sintaxe do Cast:
CAST(CAMPO AS TIPO)
GOSTEI 0
Adriano Santos
23/10/2006
Consegui,
Fiz o teste aqui e funcionou:
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
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
GOSTEI 0
Tiagorocha
23/10/2006
[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:
Parabéns Adriano, o negócio é trabalhoso, mas é muito legal a idéia!
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!
GOSTEI 0
Adriano Santos
23/10/2006
[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.
GOSTEI 0
Tiagorocha
23/10/2006
É 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
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
GOSTEI 0
Tiagorocha
23/10/2006
Esse código que eu postei é o código que eu estava usando ontem para testar a função EXTRACT (não sabia que ela existia e fiquei curioso depois que li este tópico). Ele não estava funcionando pq eu estava usando a função CAST de maneira errada. Quando vi o código do Adriano hoje cedo, corrigi os CASTs e o código funcionou.
As diferenças entre o código do Adriano são:
1. O código do Adriano atualiza a tabela, o meu não.
2. O código do Adriano soma 365 dias na data e extrai o ano, o meu extrai o ano e soma 1 ao resultado.
Se a data atual for 1º de Janeiro de um ano bissexto e você somar 365 dias, vai obter 31 de Dezembro como resultado (1/1/2008 + 365 dias = 31/12/2008). Nesse caso, o método do Adriano falha. O ideal seria juntar os dois mais ou menos assim:
As diferenças entre o código do Adriano são:
1. O código do Adriano atualiza a tabela, o meu não.
2. O código do Adriano soma 365 dias na data e extrai o ano, o meu extrai o ano e soma 1 ao resultado.
Se a data atual for 1º de Janeiro de um ano bissexto e você somar 365 dias, vai obter 31 de Dezembro como resultado (1/1/2008 + 365 dias = 31/12/2008). Nesse caso, o método do Adriano falha. O ideal seria juntar os dois mais ou menos assim:
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))+1 AS INTEGER) AS INTEGER)) WHERE EXTRACT(YEAR FROM MINHA_TABELA.MEU_CAMPO_DATA) = 2002
GOSTEI 0
Adriano Santos
23/10/2006
sem pretensão nenhuma de ser ´melhor´ que o seu, hehehe :P
Que isso cara, tranquilo. Não pensei nada disso. :wink: :wink:
Pena que o autor do tópico nem retornou pra dizer se funcionou ou não.
Fui
GOSTEI 0