Announcement

Collapse
No announcement yet.

Datum von bis und dazwischen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datum von bis und dazwischen

    Hallo
    Ich möchte in eine DB schreiben !

    sei:
    DatumBeginn = 01.01.2000
    Datum Beginn = 31.01.2000

    Gibt es einen Befehl, der mir den ganzen Zeitraum zwischen oben genannten Daten reinschreibt?

    01.01.2000
    02.01.2000
    03.01.2000
    ...
    ...
    31.01.2000

  • #2
    Nein. Keinen SQL. Je nach Datenbanksystem kannst du eine Prozedur schreiben, die das macht und diese aus deinem Programm aufrufen
    Christian

    Comment


    • #3
      Einige DB können das, z.B. PostgreSQL generate_series

      Beispiel:
      Code:
      select generate_series(13,21);
      ergibt:
      Code:
      1 13
      2 14
      3 15
      4 16
      5 17
      6 18
      7 19
      8 20
      9 21
      Ähnlich kann man auch mit anderen Datentypen arbeiten oder aus generierten Zahlen, Datumswerte umformen.
      Beispiel:
      Code:
      SELECT x
      FROM generate_series('2019-01-01 00:00:00'::timestamptz, '2019-02-01 00:00:00'::timestamptz,'1 days'::interval) a(x);
      Das ist dann die Datenquelle für das Insert Statement.

      Solche Konstrukte gibt es leider nicht in jedem System. Aber es gibt workarounds.
      Ein einfacher:
      Man nimmt eine beliebige, existierende Tabelle mit einer vorhandenen, durchgängigen Zahlenreihe, selektiert diese und rechnet als Offset ein Basisdatum dazu.
      Um sicherzustellen, dass alle benötigten Werte enhalten sind, kann man eine Prüfabfrage inetwas so durchführen:

      Code:
      select count(*) from ( select irgendeineid from irgendeineTabelle where irgendeineid between 2312 and 2312+31) x
      Es sollte soviel Tage ergeben, wie benötigt, hier 31. Der Offset muss passend gewählt werden.

      Das reicht auf jeden Fall, um sich irgendwo zur Entwicklung/Test ein paar Daten herzuzaubern.
      Wenn es systematisch eingesetzt wird, sollte es schon was handfestes sein wie generate_series, eine dafür angelegte SP oder andere validierte, verlässliche Konstrukte.

      Comment


      • #4
        Sollte deine Datebank rekursive CTEs unterstützen (ab SQL3 bzw SQL 99) kannst du dir damit die Daten generieren

        Code:
        with DaysInJanuary2000([Date]) As
        (
            Select  cast('2000-01-01' as Date)
            Union All
            Select  DateAdd(Day, 1, [Date])
            From    DaysInJanuary2000
            Where   Date < '2000-01-31'
        )
        Select  Date
        From    DaysInJanuary2000

        Comment

        Working...
        X