Announcement

Collapse
No announcement yet.

Aktuelle Woche

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

  • Aktuelle Woche

    Hallo Zusammen,
    bin SQL Anfänger und scheitere gerade an einer Abfrage..
    Aufgabe : Via SQL Abfrage soll ich Umsatzzahlen aus Rechnungstabellen auslesen, welche nur die aktuelle Woche betreffen. Mit Monat hab ich es schon hinbekommen:

    (MONTH(Auftrag.Datum)=MONTH(GETDATE())) AND (YEAR(Auftrag.Datum)=YEAR(GETDATE()))

    Aber wie muss das ganze ausschauen wenn ich die aktuelle Woche haben will ?

    Bin für jede Hilfe dankbar

    Edit: Es handelt sich um SQL Server 2000

  • #2
    Hallo Eddi,

    mit DATEPART kann man die Woche ermittlen. Das hat aber einen kleinen Haken, den in US beginnt die erste Woche am 1. Januar und kann deshalb auch nur einen Tag lang sein, siehe Beispiel unten.
    Um die KW nach DE / ISO zu bekommen, muss man selber rechnen, Beispiele sollten sich finden lassen.

    [highlight=SQL]SET NOCOUNT ON

    SELECT DATEPART(wk, GetDate()), --Kalenderwoche
    DATEPART(yy, GetDate()) --Kalenderjahr

    SELECT DATEPART(wk, '20081231') -- Mi, =53
    SELECT DATEPART(wk, '20090101') -- Do, =1
    SELECT DATEPART(wk, '20090104') -- So, =1
    SELECT DATEPART(wk, '20090105') -- Mo, =2
    SELECT DATEPART(wk, '20090111') -- So, =2

    SELECT @@DATEFIRST[/highlight]
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Aktuelle Woche am besten so:

      select dbo.isoweek(getdate())

      dbo.isoweek() ist eine bestehende Funktion des SQL-Servers.
      Und warum ISOWEEK? Siehe Wiki: http://en.wikipedia.org/wiki/ISO_week_date

      bye,
      Helmut

      Comment


      • #4
        dbo.isoweek() ist eine bestehende Funktion des SQL-Servers.
        Nicht wirklich; die UDF ist ein Beispiel aus der BOL, siehe unter "CREATE FUNCTION (Transact-SQL)", und muss erst noch angelegt werden; im Standard ist sie nicht vorhanden.
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Hallo,
          danke erstmal für die beiden Tips werde es testen und wieder berichten

          Comment


          • #6
            Hallo O.Helper,

            danke für den Hinweis, ich habe mich mittlerweile schon so daran gewöhnt, dass das für mich eine Standardfunktion geworden ist. Aber du hast schon recht, muss man sich erst aus den BOL kopieren.

            bye,
            Helmut

            Comment


            • #7
              hallo,
              wie finde ich denn heraus von wann bis wann eine Kalenderwoche geht?

              Ich kann zwar Datepart machen um die Woche zu ermitteln, aber wie kann ich die Woche übergeben und das Anfangsdatum erhalten?

              Comment


              • #8
                wie finde ich denn heraus von wann bis wann eine Kalenderwoche geht
                Öhm, indem Du es zurückrechnest, ist nur ein wenig Zahlenspielerei:
                [highlight=SQL]DECLARE @Jahr smallint,
                @Woche smallint,
                @RefWeek smallint,
                @RefDate datetime,
                @Days smallint,
                @FirstDayOfWeek datetime

                SET @Jahr = 2009;
                SET @Woche = 12;

                SET @RefDate = CONVERT(datetime, CONVERT(char(4), @Jahr) + '0201');
                SET @RefWeek = dbo.ISOweek(@RefDate);
                SET @Days = 7 * (@Woche - @RefWeek) - DATEPART(DW, @RefDate) + 1;
                SET @FirstDayOfWeek = DATEADD(d, @Days, @RefDate);

                SELECT @FirstDayOfWeek, DATENAME(DW, @FirstDayOfWeek)
                [/highlight]
                Ergebnis:
                [highlight=code]2009-03-16 00:00:00.000 Montag[/highlight]
                Liefert also den Montag der KW.
                Geht auch mit 2009 KW1 = 2008-12-29
                Und das Ende erhälst Du, indem Du noch 6 Tage drauf rechnest.
                Olaf Helper

                <Blog> <Xing>
                * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                Comment


                • #9
                  dankeschön

                  Comment

                  Working...
                  X