<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlserver.ro/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>T-SQL</title><link>http://sqlserver.ro/forums/15/ShowForum.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Re: Calcul zile concediu consumate lunar</title><link>http://sqlserver.ro/forums/thread/2789.aspx</link><pubDate>Wed, 26 Sep 2007 10:41:17 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:2789</guid><dc:creator>B_gd_n[ ]Sahlean</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/2789.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=2789</wfw:commentRss><description>&lt;p&gt;O posibila solutie MS Access &lt;img src="http://sqlserver.ro/emoticons/emotion-7.gif" alt="Tongue Tied" /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Query sql_1:&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;CREATE TABLE ZileNelucratoare (DataCalendaristica DATETIME PRIMARY KEY)&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Query sql_2:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;INSERT INTO ZileNelucratoare VALUES ('2007-01-01');&lt;/p&gt;&lt;p&gt;&lt;b&gt;Query sql_3:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;INSERT INTO ZileNelucratoare VALUES ('2007-01-02');&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Query sql_4:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;INSERT INTO ZileNelucratoare VALUES ('2007-02-08');&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Query sql_5:&lt;/b&gt; &lt;/p&gt;&lt;p&gt;CREATE TABLE ZileConcediuConsumate&amp;nbsp; ( LunaZi DATETIME PRIMARY KEY , NrZileConcediuConsumate INT NOT NULL)&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;'0=zi lucratoare / 1=zi nelucratoare&lt;br&gt;Public Function EsteZiNelucratoare(dt As Date) As Byte 'VB Byte = Int8&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If DatePart("w", dt, vbSunday, vbFirstJan1) = 7 Or DatePart("w", dt, vbSunday, vbFirstJan1) = 1 Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EsteZiNelucratoare = 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ElseIf IsNull(DLookup("DataCalendaristica", "ZileNelucratoare", "DataCalendaristica = #" &amp;amp; Format(dt, "yyyy-MM-dd") &amp;amp; "# ")) = False Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EsteZiNelucratoare = 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EsteZiNelucratoare = 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br&gt;End Function &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Public Sub ZileConcediu(dt_start As Date, nr_zile As Long)&amp;nbsp;&amp;nbsp; 'insereaza inregistrari in tabela&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CurrentDb.Execute "DELETE FROM ZileConcediuConsumate"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim luna_curenta As Long, i As Long, zile_lunare_concediu_consumate As Long&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; luna_curenta = Month(dt_start)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = -1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zile_lunare_concediu_consumate = 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; While nr_zile &amp;gt; 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = i + 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim dt_curenta As Date, sql As String&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dt_curenta = DateAdd("d", i, dt_start)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (luna_curenta &amp;lt;&amp;gt; Month(dt_curenta)) Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sql = "INSERT INTO ZileConcediuConsumate VALUES( #" &amp;amp; Format(dt_curenta, "yyyy-MM-dd") &amp;amp; "#" &amp;amp; "," &amp;amp; zile_lunare_concediu_consumate &amp;amp; " )"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CurrentDb.Execute sql&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; luna_curenta = Month(dt_curenta)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zile_lunare_concediu_consumate = 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If EsteZiNelucratoare(dt_curenta) = 0 Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Debug.Print dt_curenta, zile_lunare_concediu_consumate&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zile_lunare_concediu_consumate = zile_lunare_concediu_consumate + 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nr_zile = nr_zile - 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wend&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sql = "INSERT INTO ZileConcediuConsumate VALUES( #" &amp;amp; Format(dt_curenta, "yyyy-MM-dd") &amp;amp; "#" &amp;amp; "," &amp;amp; zile_lunare_concediu_consumate &amp;amp; " )"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CurrentDb.Execute sql&lt;br&gt;End Sub &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Exemplu utilizare:&lt;/p&gt;&lt;p&gt;[1] din VBA se apeleaza procedura cu parametrii doriti:&lt;/p&gt;&lt;p&gt;Call ZileConcediu ("2007-01-21" , 38 ) 'procedura insereaza in ZileConcediuConsumate inregistrarile dorite&lt;br&gt;&lt;/p&gt;&lt;p&gt;[2] din SQL se interogheaza tabela&amp;nbsp; ZileConcediuConsumate &lt;/p&gt;&lt;p&gt;SELECT *&lt;/p&gt;&lt;p&gt;FROM ZileConcediuConsumate&amp;nbsp; &lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Calcul zile concediu consumate lunar</title><link>http://sqlserver.ro/forums/thread/2769.aspx</link><pubDate>Tue, 25 Sep 2007 13:59:47 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:2769</guid><dc:creator>B_gd_n[ ]Sahlean</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/2769.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=2769</wfw:commentRss><description>&lt;p&gt;Urmatoarea problema mi-a fost adresata de un membru al forumului:&lt;/p&gt;&lt;p&gt;cum se poate calcula si afisa nr de zile consumate LUNAR din concediu (rezultatul trebuie sa fie sub format unui set de inregistrari sub format Luna - NrZileConsumateInLunaRespectiva) plecand de la data de start a perioadei de concediu si de la nr. zilelor de concediu ?&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;b&gt;Exemplu:&lt;/b&gt;&lt;/u&gt; &lt;b&gt;15 zile concediu incepand cu data de '2007-01-21'&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;b&gt;Rezultat asteptat:&lt;/b&gt;&lt;/u&gt;&lt;br&gt; &lt;/p&gt;&lt;p&gt;&lt;b&gt;2007-01 &amp;nbsp; 8&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2007-02 &amp;nbsp; 7&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br&gt;O posibila solutie (&lt;b&gt;brută&lt;/b&gt;):&lt;/p&gt;&lt;p&gt;--se adauga doar acele zile nelucratoare care nu sunt in weekend ( != S/D )&lt;br&gt;CREATE TABLE ZileNelucratoare (DataCalendaristica DATETIME PRIMARY KEY)&lt;br&gt;INSERT INTO ZileNelucratoare VALUES ( '2007-01-01' )&lt;br&gt;INSERT INTO ZileNelucratoare VALUES ( '2007-01-02' )&lt;br&gt;INSERT INTO ZileNelucratoare VALUES ( '2007-02-08' ) --cu titlu de exemplu&lt;br&gt;&lt;br&gt;-- 0=zi lucratoare / 1=zi nelucratoare&lt;br&gt;CREATE FUNCTION EsteZiNelucratoare( @dt DATETIME )&lt;br&gt;RETURNS TINYINT &lt;br&gt;BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DECLARE @rezultat TINYINT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF ( DATEPART( dw , @dt ) = 7 /*sambata*/ OR DATEPART( dw , @dt ) = 1 /*duminica*/ )&amp;nbsp; --vezi http://sqlserver.ro/forums/thread/2744.aspx&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SET @rezultat =&amp;nbsp; 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ELSE IF EXISTS(SELECT DataCalendaristica &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FROM ZileNelucratoare&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE DataCalendaristica = @dt)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SET @rezultat =&amp;nbsp; 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ELSE &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SET @rezultat = 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RETURN @rezultat&lt;br&gt;END&lt;br&gt;&lt;br&gt;&lt;b&gt;CREATE FUNCTION ZileConcediu( @dt_start DATETIME , @nr_zile INT)&lt;br&gt;RETURNS @rez TABLE ( LunaZi DATETIME , NrZileConcediuConsumate INT)&lt;br&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DECLARE @luna_curenta INT, @i INT, @zile_lunare_concediu_consumate INT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET @luna_curenta = MONTH(@dt_start)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET @i = -1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET @zile_lunare_concediu_consumate = 0&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHILE ( @nr_zile &amp;gt; 0 )&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SET @i = @i + 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DECLARE @dt_curenta DATETIME&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SET @dt_curenta = DATEADD( dd , @i , @dt_start )&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; IF ( @luna_curenta != MONTH(@dt_curenta) )&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; INSERT INTO @rez VALUES (@dt_curenta,@zile_lunare_concediu_consumate)&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SET @luna_curenta = MONTH(@dt_curenta)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SET @zile_lunare_concediu_consumate = 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; END&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; IF ( dbo.EsteZiNelucratoare(@dt_curenta) = 0 )&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; --PRINT CAST( @dt_curenta AS NVARCHAR(25) ) + ' / ' + CAST(@nr_zile AS NVARCHAR(25))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SET @zile_lunare_concediu_consumate = @zile_lunare_concediu_consumate + 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SET @nr_zile = @nr_zile - 1&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; END&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; END&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INSERT INTO @rez VALUES (@dt_curenta,@zile_lunare_concediu_consumate)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RETURN&lt;br&gt;END&lt;/b&gt;&lt;br&gt;&lt;br&gt;SELECT * FROM dbo.ZileConcediu( '2007-01-21' , 45 ) &lt;br&gt;&lt;/p&gt;</description></item></channel></rss>