Toon posts:

Alternatief MySql voor next_day (oracle) functie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Is er voor MySql ook zoiets als de next_day functie in Oracle?

Wil dus een 'query' maken die bijvoorbeeld voor het jaar 2002 de data retourneert voor alle 3e zondagen van de maand.

Heb zoiets dus alwel in Oracle, alleen wil het in Mysql niet helemaal.

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
Nope :)
Tenzei je script op de server maakt of in cron.d zetten

www.dannyhiemstra.nl


  • TheMrH
  • Registratie: April 2000
  • Laatst online: 01-09 22:45
Als je nou eens het script uitpoept hoe je het in Oracle doet, kunnen we het misschien omzetten naar MySQL equivalent...

The box said 'requires Windows 95 or better', so I installed Linux...


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
CREATE OR REPLACE PROCEDURE p_Nde_dag
  ( p_nDe    IN NUMBER 
  , p_dag    IN VARCHAR2
  , p_jaar   IN VARCHAR2
  
  )
IS
  v_maand  number(2) ;
  v_datum  varchar2(8) ;
  v_Nde    number(2) ;
BEGIN
  v_maand := 0 ;  
  IF p_Nde = 1 
  THEN
    v_Nde := 0 ;
  ELSIF p_Nde <= 4 
  THEN
    v_Nde := ( p_Nde * 7 ) - 7 ;
  END IF ;
  FOR i IN 1 .. 12 
  LOOP
    SELECT   to_char
           ( next_day
             ( ADD_MONTHS
                 ( to_date
                   ( '3112'||( p_jaar - 1 )
                   , 'DDMMRRRR'
                   )
                 , v_maand
                 )
             , UPPER( p_dag )
             ) + v_Nde
           , 'DDMMRRRR'
           ) 
    INTO     v_datum
    FROM     dual ;
    dbms_output.put_line( v_datum ) ;
    v_maand := v_maand + 1 ;
  END LOOP ;
END ;

Verwijderd

Topicstarter
Had het er nog niet bijgemeld, maar mag dus in combinatie met php.
Dacht zelf aan een loopje, waarbij ik begin met de eerste dag van een jaar. Hier elke keer bij de datum een dag optellen zodat je weet op welke datum een bepaalde dag valt.

Klooi zelf ook nog wel ff verder, maar tips zijn welkom.

(zit hier op m'n werk en kan helaas geen files uploaden. Het php gedeeltje kan ik hier dus niet testen. MySQL database kom ik wel op. )

Verwijderd

Topicstarter
Heb er nu zoiets van gemaakt. Vanavond test ik het ff.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?
  // Init variabelen.
  $dag     = '01';
  $maand   = '01';

  // Parameters die binnenkomen d.m.v. een form.
  // Zijn tijdelijk hier gevuld.
  $nDe     = '3'; 
  $dagnaam = 'Friday';
  $jaar    = '2001';

  // Loop aantallen.
  $dgn = 7;
  $mnd = 12;

  if( $nDe == '1')
  {
    $interval = 0;
  }
  else
  {
    $interval = $nDe * 7;
  }

  for( $i_maand = 1; $i_maand <= $mnd; $i_maand ++ )
  {
    $maand = $i_maand;
    $datum = $jaar'-'$maand'-'$dag;
    // Nog ff een while loop van maken.
    for( $i_dag = 1; $i_dag <= $dgn; $i_dag ++ )
    {
    $interval = $interval + $i_dag;

    $result = mysql( $db
               , " select   dayname( date_add( '$datum', interval $interval day ))
                 from     d_date
                 "
               );
    $haal_dag = mysql_fetch_row( $result );

    if( $haal_dag[0] == $dagnaam )
    {
      // Nu kan de gevonden dag/datum gebruikt worden in bv. inserts.
      $datum_dag = $jaar'-'$i_maand'-'$interval;
      echo "datum $nDe e $haal_dag[0] = $datum_dag";
      // loop mag nu eigenlijk stoppen.
    }
    }
  }
?>

Verwijderd

Topicstarter
Voor de geinteresseerde hier de 'tot nu toe' werkende code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?
  include( 'connect.php' );
?>
<?
  // Init variabelen.
  $dag     = '01';
  $maand   = '01';

  // Parameters die binnenkomen d.m.v. een form.
  // Zijn tijdelijk hier gevuld.
  $nDe     = '3'; // 1 - 4, nog geen rekening gehouden met evt. 5de dagen.
  $dagnaam = 'Friday';
  $jaar    = '2001';

  // Loop aantallen.
  $dgn = 7;
  $mnd = 12;

  if( $nDe == '1')
  {
    $interval = 1;
    $int_org  = $interval;
  }
  else
  {
    $interval = ($nDe * 7);
    $int_org  = $interval;
  }

  for( $i_maand = 1; $i_maand <= $mnd; $i_maand ++ )
  {
    $maand    = "$i_maand";
    $datum    = "$jaar-$maand-$dag";
    $interval = "1";
    // Nog ff een while loop van maken.
    for( $i_dag = 0; $i_dag < $dgn; $i_dag ++ )
    {
      $interval = $int_org + $i_dag;

      $result = mysql( $db
                     , " select   dayname( date_add( '$datum', interval $interval day ))
                         ,        date_add( '$datum', interval $interval day )
                         from     dual
                       "
                     );
      $haal_dag = mysql_fetch_row( $result );

      if( $haal_dag[0] == $dagnaam )
      {
        // Nu kan de gevonden dag/datum gebruikt worden in bv. inserts.
        $datum_dag = "$datum";
        echo "datum $nDe e $haal_dag[0] = $haal_dag[1]<br>";
        // loop mag nu eigenlijk stoppen.
      }
    }
  }
?>
Pagina: 1