Vítejte na blog.vyvojar.cz Přihlásit | Registrovat | Pomoc
Počet dní v mesiaci v T-SQL

Po dlhšom čase, mam aspoň chvíľku času takže asponň kratučký príspevok. V SQL Serveri som potrádal funkciu na zistenie počtu dní v mesiaci takže som si musel pomôcť napísaním vlastnej UDF.

CREATE FUNCTION dbo.fn_DaysInMonth

      (    

      @month tinyint,

      @year smallint

      )

RETURNS int

AS

BEGIN

  DECLARE @days int, @date datetime

  SET @date = CONVERT(DATETIME, STR(@month) + '/01/'+str(@year))

  SELECT @days = DAY(DATEADD (m, 1, DATEADD (d, 1 - DAY(@date), @date)) - 1)

RETURN @days

END

 

Posted: 19. listopadu 2004 19:09 by rasto
Vedeno pod:

Komentář

Boris Letocha napsal:

Neni nahodou DAY(@date) vzdy rovno 1
-> 1 - DAY(@date) je tedy vzdy rovno
-> DATEADD (d, 1 - DAY(@date), @date) je tedy rovno @date
-> SELECT @days = DAY(DATEADD (m, 1, DATEADD (d, 1 - DAY(@date), @date)) - 1) lze zoptimalizovat na:
SELECT @days = DAY(DATEADD (m, 1, @date) - 1)

Ale i tak to musi byt silene pomaly ...
Ja tedy neznam SQL takhle detailne, ale vytvaret DATETIME pomoci konverze ze stringu? To tam opravdu neni nic lepsiho?
# listopadu 19, 2004 19:59

RADl0PASlV napsal:

jednodušší řešení (a narozdíl od výše uvedeného nezávislé na různých "regional" nastaveních SQL Serveru):
--
CREATE FUNCTION dbo.fn_DaysInMonth(@month TINYINT,@year SMALLINT)RETURNS INT AS
BEGIN
RETURN DAY(DATEADD(Month,@month,CAST(@year AS VARCHAR(4))+'0101')-1)
END
--
# listopadu 20, 2004 13:24
Neregistrovaní uživatele nemužou přidávat komentáře.
Vyvojar.cz na prodej!