Announcement

Collapse
No announcement yet.

Liste mit Tagesdatum autom. generieren

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

  • Liste mit Tagesdatum autom. generieren

    Moin, moin,

    ich möchte eine Tabelle rhythmisch mit tageweisen Abbestellungen füllen, d.h. z.B. ein Kunde bekommt montags keine Lieferung, aber berücksichtige das nur ab Vertragsbeginn und bis Vertragsende.

    Wie "generiere" ich das Tagesdatum aus einer solchen Regel für einen definierten Zeitraum am dümmsten in SQL?

    Mir steht zur Verfügung: mysql, php
    Vorgabe z.B.: 1.1.2009 bis 30.6.2009, "Montags nie", Vertragsbeginn 3.3., Vertragsende 31.5.
    INSERT: (KundenID, Datum, Menge)

    Da ich das Ergebnis auf dem Wege der Entstehung noch mit einer Ausschlußliste von Feiertagen in der Datenbank vergleichen muß, würde ich eine SQL-Lösung präferieren, d.h. irgendwas aus geschickter Tabellenstruktur und SQL-Statement.

    Wie generiert man eine Liste von Tagendatumswerten automatisch in SQL? Any ideas?

    Gruß&Dank,
    fury

  • #2
    Originally posted by fury110 View Post
    Moin, moin,

    ich möchte eine Tabelle rhythmisch mit tageweisen Abbestellungen füllen, d.h. z.B. ein Kunde bekommt montags keine Lieferung, aber berücksichtige das nur ab Vertragsbeginn und bis Vertragsende.

    Wie "generiere" ich das Tagesdatum aus einer solchen Regel für einen definierten Zeitraum am dümmsten in SQL?

    Mir steht zur Verfügung: mysql, php
    Vorgabe z.B.: 1.1.2009 bis 30.6.2009, "Montags nie", Vertragsbeginn 3.3., Vertragsende 31.5.
    INSERT: (KundenID, Datum, Menge)

    Da ich das Ergebnis auf dem Wege der Entstehung noch mit einer Ausschlußliste von Feiertagen in der Datenbank vergleichen muß, würde ich eine SQL-Lösung präferieren, d.h. irgendwas aus geschickter Tabellenstruktur und SQL-Statement.

    Wie generiert man eine Liste von Tagendatumswerten automatisch in SQL? Any ideas?

    Gruß&Dank,
    fury
    My SQl mit Schleife und den da gültign Datumsfunktionen..,

    unter MSSql 2005 mach ich sowas mit ner CTE:
    [HIGHLIGHT="SQL"]-- Quellen
    -- Numbers-Table : Itzik Ben-Gan: Inside Microsoft SQL-Server 2005 T-SQL-Querying, MICROSOFT PRESS
    -- Calendar-Table: Louis Davidson: Pro SQL Server 2008 Relational Database Design and Implementation, APRESS

    BEGIN TRAN;
    DECLARE @N INT;
    SET @N = 111111;
    WITH [Base] AS
    (
    SELECT 1 AS n
    UNION ALL
    SELECT n + 1
    FROM [Base]
    WHERE n < CEILING (SQRT(@N))
    )
    , [Expand] AS
    (
    SELECT 1 AS C
    FROM [Base] AS B1
    , [Base] AS B2
    )
    , [Numbers] AS
    (
    SELECT ROW_NUMBER () OVER (ORDER BY c) AS n
    FROM [Expand]
    )
    , [Dates] AS
    (
    SELECT DATEADD (DAY, n, '17530101') AS DateValue
    FROM [Numbers]
    WHERE n <= @N
    )
    SELECT
    Dates.DateValue AS DateValue
    , DATENAME (dw , Dates.DateValue) AS DayName
    , DATENAME (mm , Dates.DateValue) AS MonthName
    , DATENAME (yy , Dates.DateValue) AS Year
    , DATEPART (day, Dates.DateValue) AS Day
    , DATEPART (DY , Dates.DateValue) AS DayOfTheYear
    , DATEPART (M , Dates.DateValue) AS Month
    , DATEPART (dw , Dates.DateValue) AS WeekDay
    , CASE
    WHEN MONTH (Dates.DateValue) <= 3 THEN 1
    WHEN MONTH (Dates.DateValue) <= 6 THEN 2
    WHEN MONTH (Dates.DateValue) <= 9 THEN 3
    ELSE 4
    END AS Quarter
    , CASE WHEN DATEPART (dw , Dates.DateValue) IN (6,7)
    THEN 1
    ELSE 0
    END AS WeekendFlag
    INTO #Calendar
    FROM [Dates] WHERE Dates.DateValue BETWEEN '20000101' AND '20200101'
    OPTION (MAXRECURSION 0);

    SELECT * FROM #Calendar

    ROLLBACK[/HIGHLIGHT]

    [HIGHLIGHT="Result"]DateValue DayName MonthName Year Day DayOfTheYear Month WeekDay Quarter WeekendFlag
    ----------------------- ---------- ---------- ---- ---- ------------ ----- ------- ----------- -----------
    2000-01-01 00:00:00.000 Samstag Januar 2000 1 1 1 6 1 1
    ...
    2020-01-01 00:00:00.000 Mittwoch Januar 2020 1 1 1 3 1 0[/HIGHLIGHT]

    Comment


    • #3
      ...coole Idee.

      Was macht denn WITH [Base] AS?
      Gibts ein ähnliches Konstrukt im mySQL-Dialekt?

      Gruß,fury

      Comment

      Working...
      X