MySQL - Domingo de páscoa

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MySQL - Domingo de páscoa

Mensagem por JoséQuintas »

Quase igual ao Harbour.

Em Harbour

Código: Selecionar todos

FUNCTION DomingoDePascoa( nAno )

   LOCAL nA, nB, nC, nD, nE, nF, nG, nH, nI, nK, nL, nM, nMes, nDia

   nA   := nAno % 19
   nB   := Int( nAno / 100 )
   nC   := nAno % 100
   nD   := Int( nB / 4 )
   nE   := nB % 4
   nF   := Int( ( nB + 8 ) / 25 )
   nG   := Int( ( nB - nF + 1 ) / 3 )
   nH   := ( 19 * nA + nB - nD - nG + 15 ) % 30
   nI   := Int( nC / 4 )
   nK   := nC % 4
   nL   := ( 32 + 2 * nE + 2 * nI - nH - nK ) % 7
   nM   := Int( ( nA + 11 * nH + 22 * nL ) / 451 )
   nMes := Int( ( nH + nL - 7 * nM + 114 ) / 31 )
   nDia := ( ( nH + nL - 7 * nM + 114 ) % 31 ) + 1

   RETURN Stod( StrZero( nAno, 4 ) + StrZero( nMes, 2 ) + StrZero( nDia, 2 ) )
Em MySQL

Código: Selecionar todos

CREATE FUNCTION ze_DomingoDePascoa( nAno INT )
RETURNS DATE
BEGIN
   DECLARE nA, nB, nC, nD, nE, nF, nG, nH, nI, nK, nL, nM, nMes, nDia INT;
   DECLARE cData DATE;

   SET nA   = Mod( nAno, 19 );
   SET nB   = floor( nAno / 100 );
   SET nC   = Mod( nAno, 100 );
   SET nD   = floor( nB / 4 );
   SET nE   = Mod( nB, 4 );
   SET nF   = floor( ( nB + 8 ) / 25 );
   SET nG   = floor( ( nB - nF + 1 ) / 3 );
   SET nH   = Mod( 19 * nA + nB - nD - nG + 15, 30 );
   SET nI   = floor( nC / 4 );
   SET nK   = Mod( nC, 4 );
   SET nL   = Mod( 32 + 2 * nE + 2 * nI - nH - nK, 7 );
   SET nM   = floor( ( nA + 11 * nH + 22 * nL ) / 451 );
   SET nMes = floor( ( nH + nL - 7 * nM + 114 ) / 31 );
   SET nDia = Mod( nH + nL - 7 * nM + 114, 31 ) + 1;
   SET cData = CONCAT( LPAD( nAno, 4, '0' ), '-', + LPAD( nMes, 2, '0' ), '-', LPAD( nDia, 2, '0' ) );

   RETURN cData;
END;
mysql.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MySQL - Domingo de páscoa

Mensagem por JoséQuintas »

Está aí uma coisa interessante....

Como compilo com -w3 -es2, isso obriga a declarar variáveis.
Ficou praticamente pronto pro MySQL.

Tá aí mais um bom motivo pra acostumar a compilar com -w3 -es2.
Mesmo que o Harbour permita compilar diferente, não é comum deixar de declarar variáveis.

Nota:
Parece que a minha ida e vinda de Visual Basic, depois -w3 -es2, e agora MySQL, parece que tudo se encaixou direitinho.
É como se, sem querer, eu tivesse feito um curso de programação, pra reaprender.

Ou... como o Itamar diz: é sempre bom aprender mais de uma linguagem.
A gente pode pegar o estilo de cada uma, e melhorar nossos fontes.
É olhar o que está na frente do nariz kkkk

Igual agora, quando comparei o fonte Harbour com o fonte MySQL.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MySQL - Domingo de páscoa

Mensagem por JoséQuintas »

Também lembra um pouco a criação de classes/métodos do Harbour.

É primeiro declarar a função, e depois colocar o fonte da função.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MySQL - Domingo de páscoa

Mensagem por JoséQuintas »

O que aprendemos neste post:

programador 1:
- MySQL é muito complicado, cheio de ponto e vírgula, muito diferente

programador 2:
- Uia... declara variáveis igual no Harbour
- Uia... declara usando DECLARE, igual no Harbour pra declarar array
- Uia... RETURN igual no Harbour
- Uia... declara a função e depois coloca rotina, igual no Harbour pra classes
- Uia... Mod() pra resto da divisão, igual no Harbour
- Só falta aprender mais alguns detalhes, parece que estou com meio caminho andado.

Uma diferença entre programador "novo" e programador "velho", é que para os novos tudo é desafio, vão em frente sempre.
Já o programador velho, enxerga só a parte ruim e/ou defeitos.

Na verdade, o programador velho tem problemas pra enxergar de perto.
Só precisa de óculos, pra voltar a enxergar o que está na frente do nariz.

De uns tempos pra cá eu tenho feito muito isso.
E sempre aproveito pra indicar alguns óculos... kkkk
Os mesmos óculos que me fizeram enxergar melhor.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MySQL - Domingo de páscoa

Mensagem por JoséQuintas »

Terça de carnaval mais fácil, já que é baseada na anterior.

Código: Selecionar todos

CREATE FUNCTION ze_tercadecarnaval( nAno INT )
RETURNS DATE
BEGIN
   DECLARE dData DATE;

   SET dData = DATE_SUB( ze_domingodepascoa( nAno ), INTERVAL 47 DAY );

   RETURN dData;
END;
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder