<?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>Blaž Humerca &#187; MS SQL</title>
	<atom:link href="http://blog.humerca.net/category/racunalnistvo/ms-sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.humerca.net</link>
	<description>...v besedi in sliki</description>
	<lastBuildDate>Sat, 28 Jan 2012 19:00:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>MS SQL &#8211; številka tedna (week number)</title>
		<link>http://blog.humerca.net/2010/04/14/ms-sql-stevilka-tedna-week-number/</link>
		<comments>http://blog.humerca.net/2010/04/14/ms-sql-stevilka-tedna-week-number/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 13:03:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MS SQL]]></category>
		<category><![CDATA[MS Windows]]></category>
		<category><![CDATA[Računalništvo]]></category>
		<category><![CDATA[datum]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[teden]]></category>

		<guid isPermaLink="false">http://blog.humerca.net/?p=515</guid>
		<description><![CDATA[V službi sem pri nekem projektu potreboval podatek za poljuben datum, da mi pove kateri teden je takrat. Ker gre za projekt pri katerem se planirajo potrebe v proizvodnji in ker je naša matična firma v nemčiji se vsi roki in planirani datumi govorijo v številkah tedna. Toda kako to številko dobiti direktno iz funkcij v MS SQL-u? Ko sem pogledal v MS SQL books online sem našel čisto preprosto sintakso: DATEPART (wk, &#8217;2010-04-12&#8242;) Vendar tukaj dobim napačno številko. Problem je v tem, da se predvsem v evropi uporablja štetje tednov drugače. Sql vzame kot prvi teden dneve, ki so<a href="http://blog.humerca.net/2010/04/14/ms-sql-stevilka-tedna-week-number/">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p><img src="/slike/2010_04_14/sql.jpg" alt='Sql' border=0><br />
V službi sem pri nekem projektu potreboval podatek za poljuben datum, da mi pove kateri teden je takrat. Ker gre za projekt pri katerem se planirajo potrebe v proizvodnji in ker je naša matična firma v nemčiji se vsi roki in planirani datumi govorijo v številkah tedna. Toda kako to številko dobiti direktno iz funkcij v MS SQL-u? </p>
<p>Ko sem pogledal v <a href="http://msdn.microsoft.com/en-us/library/ms174420.aspx">MS SQL books online</a> sem našel čisto preprosto sintakso: </p>
<p>DATEPART (wk, &#8217;2010-04-12&#8242;)  </p>
<p>Vendar tukaj dobim napačno številko. Problem je v tem, da se predvsem v evropi uporablja štetje tednov drugače. Sql vzame kot prvi teden dneve, ki so še v zadnjem tednu prejšnjega leta. Po evopskem (ISO) načinu, pa se šteje za prvi teden šele prvi ponedeljek. Primer: 1.1.2010 je bil petek. In MS SQL šteje ta teden že kot prvi teden, pa čeprav je to tudi v bistvu 53.teden prejšnjega leta. ISO štetje, pa vzame kot prvi dan 1 tedna 4.1.2010 &#8211; ponedeljek.</p>
<p>Torej pravilna sintaksa je : </p>
<p>select DATEPART (isowk, &#8217;2010-04-12&#8242;) as weeknumber </p>
<p>Vendar sem ugotovil, da to deluje šele na MS SQL 2008. Torej sem moral za MS SQL 2000 poiskati drugo rešitev. In sem jo našel. Prav tako je posredovana iz strani <a href="http://msdn.microsoft.com/en-us/library/aa258261(SQL.80).aspx">Microsofta</a>. Pohvalno. </p>
<p>Na sistemski bazi master sem poiskal User Defined functions in dodal sledeče: </p>
<p><code>CREATE FUNCTION ISOweek  (@DATE datetime)<br />
RETURNS int<br />
AS<br />
BEGIN<br />
   DECLARE @ISOweek int<br />
   SET @ISOweek= DATEPART(wk,@DATE)+1<br />
      -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')<br />
--Special cases: Jan 1-3 may belong to the previous year<br />
   IF (@ISOweek=0)<br />
      SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1<br />
         AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1<br />
--Special case: Dec 29-31 may belong to the next year<br />
   IF ((DATEPART(mm,@DATE)=12) AND<br />
      ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))<br />
      SET @ISOweek=1<br />
   RETURN(@ISOweek)<br />
END</code></p>
<p>Ko hočemo poklicati to funkcijo uporabimo slednje (primer): </p>
<p>SELECT master.dbo.ISOweek(&#8217;2010-04-14&#8242;) AS &#8216;ISO Week&#8217; </p>
<p>Tako pa smo rešili še en problem <img src='http://blog.humerca.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.humerca.net/2010/04/14/ms-sql-stevilka-tedna-week-number/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

