Announcement

Collapse
No announcement yet.

Letzter Tag des Monats herausfinden?

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

  • Letzter Tag des Monats herausfinden?

    Hallo zusammen!

    Wir haben hier einen ADS 8.1 laufen...

    Ich grübele gerade darüber nach, wie das gehen könnte den Letzten Tag einer gegebenen Monat/Jahr Kombination herausfinden zu können, also z.B. "29" für "2008-02"?

    Hat da jemand eine Idee?

    Dank im voraus!

    EDIT: Okay, einen Ansatz habe ich schon.. quasi den 1. des Folgemonats nehmen und davon einen Tag abziehen... aber wen einer das schon mal fertig ausprogrammiert hat... sage ich natürlich nicht nein ;-)
    Zuletzt editiert von oliver1974; 11.09.2008, 15:53.

  • #2
    Hi,

    das geht ganz einfach man nimmt den ersten Tag des Folgemonats und zieht einen Tag ab.

    Gruß
    docendo discimus

    Comment


    • #3
      Originally posted by frauwue View Post

      das geht ganz einfach man nimmt den ersten Tag des Folgemonats und zieht einen Tag ab.
      ..ääähh, ja, ich schreib ja schon oben dass ich darauf auch schon gekommen bin.

      Hab mittlerweile auch eine Funktion gebaut, die hat mit Sicherheit noch Verbesserungspotential, aussserdem wird sie mit den deutschen Datumsangaben wohl noch nicht zurecht kommen.. aber mal als Anregung

      Code:
      TRY
          DROP FUNCTION GetLastDayOfMonth;
      CATCH ALL
          // Im Falle, dass die Funktion nicht da ist, einfach nix tun.
      END TRY;
      
      CREATE FUNCTION GetLastDayOfMonth( yearmonth char(7) )
      RETURNS integer
      DESCRIPTION 'This function returns the last day of a given month (like 2008-2 returns 29)'
      /* Gibt den zu suchenden Monat an (year-month) */
      BEGIN
          
          
          /* Nur zu internen Zwecken */
          declare @month INTEGER;
          declare @returnday INTEGER;
          declare @monthstring STRING;
          declare @calcdate DATE;
      
          set @month = CONVERT(RIGHT(yearmonth, 2), SQL_INTEGER) + 1;
      
          /* Prüfen, ob @month = 13, dann zurück auf 1 */
          @month = IIF(@month > 12, 1, @month);
          @monthstring = CONVERT(@month, SQL_VARCHAR);
      
          @monthstring = IIF(LENGTH(@monthstring) < 2, '0' + @monthstring, @monthstring);
      
          set @calcdate = CONVERT((LEFT(yearmonth, 4) + '-' + @monthstring + '-01'), SQL_DATE);
          @calcdate = @calcdate -1;
      
          @returnday = CONVERT(SUBSTRING(CONVERT(@calcdate, SQL_VARCHAR),9,2), SQL_INTEGER);
      
          select @returnday from system.iota;
      
          RETURN @returnday;
      END;
      Aufruf mit sowas wie:

      SELECT GetLastDayOfMonth('2008-02') FROM ....

      Wie gesagt, geht wahrscheinlich noch sicherer, kürzer....

      Comment


      • #4
        Hi,

        Entschuldigung das hatte ich überlesen.

        Gruß
        docendo discimus

        Comment


        • #5
          darf ich auch mal?

          Code:
          if exists(select * from system.functions where name='encodedate')
            then drop function encodedate;
          endif;
          
          create function encodedate(i_year integer, i_month integer, i_day integer)
          returns date
          begin
            declare @ts timestamp;
            declare @d date;
            @ts=cast('2000-01-01 00:00:00' as sql_timestamp);
            @ts=timestampadd(sql_tsi_year,  i_year-2000, @ts);
            @ts=timestampadd(sql_tsi_month, i_month-1,   @ts);
            @ts=timestampadd(sql_tsi_day,   i_day-1,     @ts);
            @d=cast(@ts as sql_date);
            return @d;
          end;
          
          if exists(select * from system.functions where name='GetLastDayOfMonth')
            then drop function GetLastDayOfMonth;
          endif;
          
          CREATE FUNCTION GetLastDayOfMonth( i_year integer, i_month integer )
          RETURNS integer
          DESCRIPTION 'This function returns the last day of a given month (like 2008,2 returns 29)'
          BEGIN
            declare @ts timestamp;
            declare @res integer;
            @ts=cast(encodedate(i_year, i_month, 1) as sql_timestamp);
            @ts=timestampadd(sql_tsi_month,1,@ts);
            @ts=timestampadd(sql_tsi_day,-1,@ts);   
            @res=extract(day from @ts);  
            RETURN @res;
          END;
          
          select GetLastDayOfMonth(2008,2),GetLastDayOfMonth(2008,1) from system.iota;

          Comment


          • #6
            Originally posted by frauwue
            Entschuldigung das hatte ich überlesen.
            ..so war das jetzt nicht gemeint, macht ja auch nix.. ich mein ja nur :-)

            Originally posted by Joachim Dürr
            darf ich auch mal?
            Ahh ja, das sieht interessant aus.. viele Dinge drin von denen ich noch lernen kann....

            Mal nebenbei..: Gibt es für uns "Exoten" (=ADS Nutzer) eigentlich irgendwie ne lohnende Linksammlung mit Tipss/Tricks/Functions usw?

            Comment


            • #7
              http://devzone.advantagedatabase.com -> mit Links auf Knowledgebase, Newsgroups, Tech Tipps, Code Central, Online Hilfe
              http://ads.extendsys.de -> Supportseite des Europ-Teams (da findet man auch ein paar nützliche SQL Skripten)

              Comment


              • #8
                Klasse! Danke!

                Comment

                Working...
                X