Announcement

Collapse
No announcement yet.

Rechnen mit Datum....

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

  • Rechnen mit Datum....

    Hallo,

    über

    select getdate()

    kann ich ja das akt.Datum (heutiges) abfragen.

    Folgende Aufgabe:

    Ich bräuchte das Datum, von heute, zurück zum letzten ersten, und dann noch einen Monat zurück .

    Beispiel:

    Heute ist der 07.02.2008

    Mit getdate() bekomme ich als Ergebnis:
    2008-02-07 15:51:44.490

    Der letzte erste wäre
    2008-02-01 00:00:00.000

    Und dann noch 1 Monat rückwärts:
    2008-01-01 00:00:00.000

    Und dann die Krönung: Ich hätte das gerne als Zahl konvertiert:
    20080101

    Wann das Konvertieren abläuft, ist eigentlich egal. Irgendwann am Ende sollte das Ergebnis 20080101 rauspurzeln.

    Könnt Ihr mir helfen? Ich stehe auf'm Schlauch und hab keine Idee, wie ich überhaupt von dem jetzigen Datum zum Monatsanfang kommen soll, bzw. wie ich das Datum in eine Zahl konvertiert bekomme.

    Das ganze soll am MS SQL 2000 ablaufen.

    HÖÖÖÖÖÖÖLLLPPPP!

    Gruß, Avhy.

  • #2
    unter MS2005 geht das:
    Code:
    CREATE FUNCTION FirstOfLastMonth ()
    RETURNS int
    AS
    BEGIN
    DECLARE @Month INT, @Year INT, @Result INT;
    SET @Month = MONTH (GETDATE ());
    SET @Year = YEAR (GETDATE ());
    IF @Month -1 = 0
    BEGIN  
       SET @Year = @Year - 1;
       SET @Month = 12;
    END
    SET @Result = 
       CAST (CAST (@Year AS CHAR (4) ) 
      	+ CASE WHEN  @MONTH < 10  THEN '0' + CAST (@MONTH AS CHAR (1)) ELSE CAST (@MONTH AS CHAR (2))END
    	+ '01' AS INT);
    RETURN @Result;
    END;
    GO
    SELECT dbo.FirstOfLastMonth (), dbo.FirstOfLastMonth ()  +1

    Comment


    • #3
      Ich habe auch noch einen für MSSQL-Server:
      Code:
      declare
      	@aDate smalldatetime
      	, @aDateErg int
      
      --aktuelles Datum ermitteln
      set @aDate = getdate()
      
      --Nachkommaanteil abschneiden (da gibt es auch noch andere Varianten...)
      set @aDate = cast(year(@aDate) * 10000 + month(@aDate) * 100 + day(@aDate) as char(8))
      
      --ersten des akt. Monats ermittelen (aktuellen Tagwert abziehen)
      set @aDate = dateadd(dd, (day(@aDate) - 1) * -1, @aDate)
      
      --ersten des letzten Monats ermittelen (einen Monat abziehen)
      set @aDate = dateadd(mm, -1, @aDate)
      
      --umwandeln
      set @aDateErg = cast(year(@aDate) * 10000 + month(@aDate) * 100 + day(@aDate) as char(8))
      
      print @aDate
      print @aDateErg
      Gruß
      Olaf

      Comment


      • #4
        In der Kürze liegt die Würze

        select year(dateadd(m,-1,getdate())) * 10000 + month(dateadd(m,-1,getdate())) * 100 + 1

        Comment

        Working...
        X