<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le blog de SQLpro &#187; mois comptable</title>
	<atom:link href="https://blog.developpez.com/sqlpro/ptag/mois-comptable/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/sqlpro</link>
	<description>Le SQL pour SQL Server, PostGreSQL et tous les autres SGBDR</description>
	<lastBuildDate>Thu, 15 Oct 2020 12:59:17 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Calcules de durée en jour avec des mois comptables  de 30 jours</title>
		<link>https://blog.developpez.com/sqlpro/p12855/langage-sql-norme/calcules-de-duree-en-jour-avec-des-mois-compatbels-de-30-jours</link>
		<comments>https://blog.developpez.com/sqlpro/p12855/langage-sql-norme/calcules-de-duree-en-jour-avec-des-mois-compatbels-de-30-jours#comments</comments>
		<pubDate>Mon, 23 Mar 2015 22:55:56 +0000</pubDate>
		<dc:creator><![CDATA[SQLpro]]></dc:creator>
				<category><![CDATA[Langage SQL (norme)]]></category>
		<category><![CDATA[MS SQL Server]]></category>
		<category><![CDATA[SQL Server 2000]]></category>
		<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[SQL Server 2014]]></category>
		<category><![CDATA[30 jours]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[mois comptable]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/sqlpro/?p=556</guid>
		<description><![CDATA[À la suite d&#8217;une demande du forum, je me suis penché sur le calcul de durée en jour avec des mois comptables de 30 jours. Comme d&#8217;habitude il faut passer par une table de date ! La demande originale est postée ici : www.developpez.net/forums/d1508019/bases-donnees/ms-sql-server/developpement/ Nous sommes partit de la table suivante : CREATE TABLE T_DAT [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>À la suite d&rsquo;une demande du forum, je me suis penché sur le calcul de durée en jour avec des mois comptables de 30 jours. Comme d&rsquo;habitude il faut passer par une table de date !<br />
<span id="more-556"></span><br />
La demande originale est postée ici :<br />
<a href="www.developpez.net/forums/d1508019/bases-donnees/ms-sql-server/developpement/">www.developpez.net/forums/d1508019/bases-donnees/ms-sql-server/developpement/</a></p>
<p>Nous sommes partit de la table suivante :</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> T_DAT<br />
<span style="color: #66cc66;">&#40;</span>DAT_DATE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">DATE</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">,</span><br />
&nbsp;DAT_AN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #993333; font-weight: bold;">CAST</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">YEAR</span><span style="color: #66cc66;">&#40;</span>DAT_DATE<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #993333; font-weight: bold;">SMALLINT</span><span style="color: #66cc66;">&#41;</span> PERSISTED<span style="color: #66cc66;">,</span><br />
&nbsp;DAT_MOIS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #993333; font-weight: bold;">CAST</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">MONTH</span><span style="color: #66cc66;">&#40;</span>DAT_DATE<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> TINYINT<span style="color: #66cc66;">&#41;</span> PERSISTED<span style="color: #66cc66;">,</span><br />
&nbsp;DAT_JOUR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #993333; font-weight: bold;">CAST</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">DAY</span><span style="color: #66cc66;">&#40;</span>DAT_DATE<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> TINYINT<span style="color: #66cc66;">&#41;</span> &nbsp; PERSISTED<span style="color: #66cc66;">,</span><br />
&nbsp;DAT_NB_JOUR_FIN_MOIS &nbsp; &nbsp; TINYINT <span style="color: #66cc66;">,</span><br />
&nbsp;DAT_JOUR_FIN_MOIS &nbsp; &nbsp; &nbsp; &nbsp;TINYINT<br />
<span style="color: #66cc66;">&#41;</span>;</div></div>
<p>Que nous avons rempli avec les 3 requêtes suivantes :</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">SET</span> NOCOUNT <span style="color: #993333; font-weight: bold;">ON</span>;<br />
<span style="color: #993333; font-weight: bold;">DECLARE</span> @D <span style="color: #993333; font-weight: bold;">DATE</span><br />
<span style="color: #993333; font-weight: bold;">SET</span> @D <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'2000-01-01'</span><br />
WHILE @D <span style="color: #66cc66;">&lt;</span> <span style="color: #ff0000;">'2100-12-31'</span><br />
<span style="color: #993333; font-weight: bold;">BEGIN</span><br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> T_DAT <span style="color: #66cc66;">&#40;</span>DAT_DATE<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>@D<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">SET</span> @D <span style="color: #66cc66;">=</span> DATEADD<span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">DAY</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> @D<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #993333; font-weight: bold;">END</span>;<br />
<span style="color: #993333; font-weight: bold;">GO</span><br />
<br />
<span style="color: #993333; font-weight: bold;">WITH</span> T0 <span style="color: #993333; font-weight: bold;">AS</span><br />
<span style="color: #66cc66;">&#40;</span><br />
<span style="color: #993333; font-weight: bold;">SELECT</span> DAT_DATE<span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">ROW_NUMBER</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OVER</span><span style="color: #66cc66;">&#40;</span>PARTITION <span style="color: #993333; font-weight: bold;">BY</span> DAT_AN<span style="color: #66cc66;">,</span> DAT_MOIS <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> DAT_JOUR <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">-</span> <span style="color: #cc66cc;">1</span> <span style="color: #993333; font-weight: bold;">AS</span> NB_JOUR_FIN_MOIS<br />
<span style="color: #993333; font-weight: bold;">FROM</span> &nbsp; T_DAT<br />
<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #993333; font-weight: bold;">UPDATE</span> T<br />
<span style="color: #993333; font-weight: bold;">SET</span> &nbsp; &nbsp;DAT_NB_JOUR_FIN_MOIS <span style="color: #66cc66;">=</span> NB_JOUR_FIN_MOIS<br />
<span style="color: #993333; font-weight: bold;">FROM</span> &nbsp; T_DAT <span style="color: #993333; font-weight: bold;">AS</span> T<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">INNER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> T0 <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">ON</span> T<span style="color: #66cc66;">.</span>DAT_DATE <span style="color: #66cc66;">=</span> T0<span style="color: #66cc66;">.</span>DAT_DATE;<br />
<span style="color: #993333; font-weight: bold;">GO</span><br />
<br />
<span style="color: #993333; font-weight: bold;">UPDATE</span> T<br />
<span style="color: #993333; font-weight: bold;">SET</span> &nbsp; &nbsp;DAT_JOUR_FIN_MOIS <span style="color: #66cc66;">=</span> T2<span style="color: #66cc66;">.</span>DAT_JOUR <br />
<span style="color: #993333; font-weight: bold;">FROM</span> &nbsp; T_DAT <span style="color: #993333; font-weight: bold;">AS</span> T<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">INNER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> T_DAT <span style="color: #993333; font-weight: bold;">AS</span> T2<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">ON</span> T<span style="color: #66cc66;">.</span>DAT_AN <span style="color: #66cc66;">=</span> T2<span style="color: #66cc66;">.</span>DAT_AN<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">AND</span> &nbsp;T<span style="color: #66cc66;">.</span>DAT_MOIS <span style="color: #66cc66;">=</span> T2<span style="color: #66cc66;">.</span>DAT_MOIS<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">AND</span> T2<span style="color: #66cc66;">.</span>DAT_NB_JOUR_FIN_MOIS <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span><br />
<span style="color: #993333; font-weight: bold;">GO</span></div></div>
<p>Nous avons ensuite créé la fonction de calcul :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">CREATE FUNCTION F_MOIS30 (@D1 DATE, @D2 DATE)<br />
RETURNS INT<br />
AS<br />
BEGIN<br />
&nbsp; &nbsp;DECLARE @AN INT, @MOIS INT, @JFM INT<br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp;SELECT @AN = DAT_AN, @MOIS = DAT_MOIS, @JFM = DAT_NB_JOUR_FIN_MOIS<br />
&nbsp; &nbsp;FROM &nbsp; T_DAT <br />
&nbsp; &nbsp;WHERE DAT_DATE = @D1;<br />
<br />
&nbsp; &nbsp;SELECT @AN = DAT_AN - @AN, @MOIS = DAT_MOIS - @MOIS, @JFM = @JFM + DAT_JOUR<br />
&nbsp; &nbsp;FROM &nbsp; T_DAT <br />
&nbsp; &nbsp;WHERE DAT_DATE = @D2;<br />
<br />
&nbsp; &nbsp;RETURN (@AN * 12 + @MOIS - 1) * 30 + @JFM<br />
END;<br />
GO</div></div>
<p>Il ne restait plus qu&#039;à la tester :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">SELECT dbo.F_MOIS30('2014-03-20', '2015-02-01')</div></div>
<p>Ce qui donne 312 résultat escompté !</p>
<p>CQFD</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Frédéric Brouard, alias SQLpro, ARCHITECTE DE DONNÉES<br />
Expert &nbsp;S.G.B.D &nbsp;relationnelles &nbsp; et &nbsp; langage &nbsp;S.Q.L<br />
Moste &nbsp;Valuable &nbsp;Professionnal &nbsp;Microsoft &nbsp;SQL Server<br />
Société SQLspot &nbsp;: &nbsp;modélisation, conseil, formation,<br />
optimisation, &nbsp;audit, &nbsp;tuning, &nbsp;administration &nbsp;SGBDR<br />
Enseignant: CNAM PACA, ISEN Toulon, CESI Aix en Prov.</div></div>
<p>L&rsquo;entreprise <a href="http://www.sqlspot.com">SQL Spot</a><br />
<strong>Le site web sur le </strong><a href="http://sqlpro.developpez.com/">SQL et les SGBDR</a></p>
<p><img src="http://blog.developpez.com/media/Microsoft_MVP_logo_vertical Brouard 400.jpg" width="400" height="135" alt="MVP Microsoft SQL
Server" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
