<?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>date &amp; time &#8211; SQLpowered.com</title>
	<atom:link href="https://sqlpowered.com/tag/date-time/feed/" rel="self" type="application/rss+xml" />
	<link>https://sqlpowered.com</link>
	<description>SQL Server + BI</description>
	<lastBuildDate>Wed, 22 Jul 2020 05:06:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://sqlpowered.com/wp-content/uploads/2020/07/FavIcon-e1594067873682-99x100.png</url>
	<title>date &amp; time &#8211; SQLpowered.com</title>
	<link>https://sqlpowered.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Odstranění času nebo datumu z DATETIME datového typu</title>
		<link>https://sqlpowered.com/odstraneni-casu-nebo-datumu-z-datetime-datoveho-typu/</link>
					<comments>https://sqlpowered.com/odstraneni-casu-nebo-datumu-z-datetime-datoveho-typu/#respond</comments>
		
		<dc:creator><![CDATA[Jan Dvořák]]></dc:creator>
		<pubDate>Tue, 30 Jun 2015 07:02:19 +0000</pubDate>
				<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[date & time]]></category>
		<guid isPermaLink="false">https://sqlpowered.com/?p=709</guid>

					<description><![CDATA[Velmi často se stává, že při práci s DATETIME datovým typem nás nezajímá informace o čase, ale pouze datum. Před příchodem SQL 2008 neexistovaly samostatné datové typy pro ukládání pouze datum nebo pouze času (DATE, TIME) a pokud byl v datetime datovém typu uložen i čas, nezbývalo, než čas odstranit (respektive...]]></description>
										<content:encoded><![CDATA[<p>Velmi často se stává, že při práci s DATETIME datovým typem nás nezajímá informace o čase, ale pouze datum. Před příchodem SQL 2008 neexistovaly samostatné datové typy pro ukládání pouze datum nebo pouze času (DATE, TIME) a pokud byl v datetime datovém typu uložen i čas, nezbývalo, než čas odstranit (respektive vynulovat k půlnoci) a dále pracovat s DATETIME datovým typem jako by obsahoval pouze datum.</p>
<p>Nejčastěji používanou metodou bylo využití funkcí DATEADD() a DATEDIFF(). Nejprve pomocí funkce DATEDIFF() získáme počet dnů od dne 0 (1.1.1753) do aktuálního data vráceného funkcí GETDATE(). Poté toto číslo převedeme na datum pomocí funkce DATEADD(), kdy ke dni 0 (1.1.1753) opět přičteme počet dnů získaných v předchozím kroku.<span id="more-709"></span></p>
<p>Nyní si vše ukážeme v tomto jednoduchém příkladu:</p>
<pre class="lang:tsql mark:7 decode:true ">DECLARE @DateTime DATETIME

SET @DateTime = '2015-05-31 14:33:22'

SELECT @DateTime

SELECT DATEADD(D, 0, DATEDIFF(D, 0, @DateTime))
GO</pre>
<p><img decoding="async" class="alignnone size-full wp-image-914" src="https://sqlpowered.com/wp-content/uploads/2015/06/DatetimeToDate1.png" alt="DatetimeToDate1" width="172" height="93" /></p>
<p>Nejprve jsem si nadefinovali proměnnou @DateTime datového typu DATETIME a následně nastavili její hodnotu na uvedený datum a čas. Hodnotu v proměnné jsme zobrazili pomocí SELECTu nejprve v původní podobě a poté s odstraněním informace o čase.</p>
<p>Uvedený zápis není samozřejmě jedinou možností. Stejného výsledku můžeme dosáhnout například i takto:</p>
<pre class="lang:tsql decode:true">SELECT CAST(DATEDIFF(D, 0, GETDATE()) AS DATETIME)</pre>
<h2>SQL 2008</h2>
<p>Při vývoji databází pro verzi 2008 a vyšší již nejsme vázáni pouze na použití datového typu DATETIME (s výjimkou požadavku zpětné kompatibility), ale můžeme využít přímo nový datový typ DATE, který umožňuje uložit pouze informaci o datu a dále s ní pracovat bez nutnosti řešit odstranění časové informace např. při porovnávání. DATE můžeme efektivně využít i pro náš účel, tedy odstranění času z DATETIME datového typu, a to tak, že provedeme přetypování z DATETIME na DATE:</p>
<pre class="lang:tsql mark:7 decode:true">DECLARE @DateTime DATETIME

SET @DateTime = '2015-05-31 14:33:22' 

SELECT @DateTime [DATETIME]

SELECT CAST(@DateTime AS DATE) [DATE]
GO
</pre>
<p><img decoding="async" class="alignnone size-full wp-image-917" src="https://sqlpowered.com/wp-content/uploads/2015/06/DatetimeToDate2.png" alt="DatetimeToDate2" width="170" height="88" /></p>
<p>Na obrázku vidíme, že informace o čase byla odstraněna stejně jako v předchozím případě, ale také, že Management Studio správně rozumí novému DATE typu a zobrazuje ho jinak než DATETIME.</p>
<p>Stejným způsobem můžeme postupovat, pokud potřebujeme z DATETIME  získat pouze čas. Pouze místo na DATE  provedeme přetypování na TIME:</p>
<pre class="lang:tsql mark:7 decode:true ">DECLARE @DateTime DATETIME

SET @DateTime = '2015-05-31 14:33:22' 

SELECT @DateTime [DATETIME]

SELECT CAST(@DateTime AS TIME) [TIME]
GO</pre>
<p><img decoding="async" class="alignnone size-full wp-image-920" src="https://sqlpowered.com/wp-content/uploads/2015/06/DatetimeToDate3.png" alt="DatetimeToDate3" width="171" height="88" /></p>
<p>Na obrázku si můžeme všimnout jedné podstatné věci. DATETIME má za desetinou tečkou tři nuly (milisekundy) a TIME nul sedm (stovky nanosekund). Je to dáno tím, že nové datové typy (DATETIME2, DATE, TIME) od verze 2008 dále přináší vyšší přesnost času a řeší tím některé problémy starších datových typů. Pokud bychom chtěli v našem případě dosáhnout stejné přesnosti času jakou poskytuje DATETIME, museli bychom provést přetypování na TIME(3), kdy hodnotou v závorce v rozsahu 0 až 7 určíme počet desetinných míst, na která se bude dělit vteřina, v našem případě tedy 3:</p>
<pre class="lang:tsql mark:7 decode:true ">DECLARE @DateTime DATETIME

SET @DateTime = '2015-05-31 14:33:22' 

SELECT @DateTime [DATETIME]

SELECT CAST(@DateTime AS TIME(3)) [TIME]
GO</pre>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-922" src="https://sqlpowered.com/wp-content/uploads/2015/06/DatetimeToDate4.png" alt="DatetimeToDate4" width="172" height="87" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlpowered.com/odstraneni-casu-nebo-datumu-z-datetime-datoveho-typu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Rounding DATETIME values to midnight</title>
		<link>https://sqlpowered.com/rounding-datetime-to-midnight/</link>
					<comments>https://sqlpowered.com/rounding-datetime-to-midnight/#respond</comments>
		
		<dc:creator><![CDATA[Jan Dvořák]]></dc:creator>
		<pubDate>Tue, 05 Aug 2014 15:01:57 +0000</pubDate>
				<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[date & time]]></category>
		<guid isPermaLink="false">https://sqlpowered.com/?p=363</guid>

					<description><![CDATA[DATETIME data type precision for milliseconds is rounded to increments of .000, .003, or .007 which leads to some unexpected behavior from time to time. I.e. if we will try to extract at which day event logged with milliseconds occurred. The example below demonstrates it pretty: Event occurring at 20101205...]]></description>
										<content:encoded><![CDATA[<p>DATETIME data type precision for milliseconds is rounded to increments of .000, .003, or .007 which leads to some unexpected behavior from time to time. I.e. if we will try to extract at which day event logged with milliseconds occurred. The example below demonstrates it pretty: Event occurring at <em>20101205 23:59:999</em> will be assigned to day 6 instead of 5. Even if it looks like to be a minor issue I saw few serious issues it has caused in an online system for financial transactions processing.</p>
<pre class="lang:tsql decode:true">SELECT '20101205 23:59:000', DAY(CAST('20101205 23:59:59:000' AS DATETIME))
UNION ALL
SELECT '20101205 23:59:997', DAY(CAST('20101205 23:59:59:997' AS DATETIME))
UNION ALL
SELECT '20101205 23:59:998', DAY(CAST('20101205 23:59:59:998' AS DATETIME))
UNION ALL
SELECT '20101205 23:59:999', DAY(CAST('20101205 23:59:59:999' AS DATETIME))
UNION ALL
SELECT '20101206 00:00:000', DAY(CAST('20101206 00:00:00:000' AS DATETIME))</pre>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-364" src="https://sqlpowered.com/wp-content/uploads/2015/06/RoundingDatetimeAroundMidnight.jpg" alt="RoundingDatetimeAroundMidnight" width="221" height="97" /></p>
<p>Using the modern DATETIME2 data type introduced in SQL Server 2008 no such issue exists:</p>
<pre class="lang:tsql decode:true ">SELECT '20101205 23:59:000', DAY(CAST('20101205 23:59:59:000' AS DATETIME2)) UNION ALL 
SELECT '20101205 23:59:997', DAY(CAST('20101205 23:59:59:997' AS DATETIME2)) UNION ALL 
SELECT '20101205 23:59:998', DAY(CAST('20101205 23:59:59:998' AS DATETIME2)) UNION ALL 
SELECT '20101205 23:59:999', DAY(CAST('20101205 23:59:59:999' AS DATETIME2)) UNION ALL 
SELECT '20101206 00:00:000', DAY(CAST('20101206 00:00:00:000' AS DATETIME2))</pre>
<p><img loading="lazy" decoding="async" class="alignnone  wp-image-4480" src="https://sqlpowered.com/wp-content/uploads/2014/08/Rounding-DATETIME-to-midnight.png" alt="" width="209" height="76" srcset="https://sqlpowered.com/wp-content/uploads/2014/08/Rounding-DATETIME-to-midnight.png 457w, https://sqlpowered.com/wp-content/uploads/2014/08/Rounding-DATETIME-to-midnight-300x109.png 300w, https://sqlpowered.com/wp-content/uploads/2014/08/Rounding-DATETIME-to-midnight-150x54.png 150w, https://sqlpowered.com/wp-content/uploads/2014/08/Rounding-DATETIME-to-midnight-360x131.png 360w, https://sqlpowered.com/wp-content/uploads/2014/08/Rounding-DATETIME-to-midnight-160x58.png 160w, https://sqlpowered.com/wp-content/uploads/2014/08/Rounding-DATETIME-to-midnight-320x116.png 320w" sizes="auto, (max-width: 209px) 100vw, 209px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlpowered.com/rounding-datetime-to-midnight/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
