{"id":355,"date":"2007-12-10T14:16:41","date_gmt":"2007-12-10T13:16:41","guid":{"rendered":"http:\/\/soci.hu\/blog\/index.php\/2007\/12\/10\/sql-server-2008-ujdonsagok-2-datum-tipusok\/"},"modified":"2007-12-10T14:28:13","modified_gmt":"2007-12-10T13:28:13","slug":"sql-server-2008-ujdonsagok-2-datum-tipusok","status":"publish","type":"post","link":"https:\/\/soci.hu\/blog\/index.php\/2007\/12\/10\/sql-server-2008-ujdonsagok-2-datum-tipusok\/","title":{"rendered":"SQL Server 2008 \u00fajdons\u00e1gok 2. &#8211; D\u00e1tum t\u00edpusok"},"content":{"rendered":"<p>H\u00e1t igen, m\u00e1r az SQL Server 2005-ben is \u00fagy volt, hogy lesz DATE \u00e9s TIME t\u00edpus. Meg is \u00edrt\u00e1k CLR t\u00edpusk\u00e9nt, azt\u00e1n kidobt\u00e1k, nem illett bele a k\u00e9pbe, kil\u00f6kte azt a gazdatest.<\/p>\n<p>Most, 2008-ban \u00fajra nekil\u00e1ttak, ez\u00fattal sikerrel (ha \u00e9lcel\u0151dni szeretn\u00e9k, m\u00e1rpedig mi\u00e9rt ne, 10 \u00e9ve kellett volna ezt megl\u00e9pni).<\/p>\n<p>No, mi a bajunk a DATETIME \u00e9s SMALLDATETIME t\u00edpusokkal.<br \/>\n1. Kicsi az \u00e9rt\u00e9kk\u00e9szlet\u00fcnk, 1753 el\u0151tt is volt m\u00e1r vil\u00e1g.<br \/>\n2. Kicsi a pontoss\u00e1guk, a pontosabbnak, a DATETIME-nak is 3 ms a felbont\u00e1sa.<br \/>\n3. Nem kezelnek id\u0151z\u00f3n\u00e1t.<br \/>\n4. Nincs k\u00fcl\u00f6n csak d\u00e1tum \u00e9s csak id\u0151 t\u00e1rol\u00f3 t\u00edpus. Eleve, sokszor csak az egyik kell, pl. napra kerek\u00edtett d\u00e1tum t\u00e1rol\u00e1s, \u00e9s ilyenkor nem csak k\u00f6nnyebb kezelni a k\u00fcl\u00f6n t\u00e1rolt darabokat, de hely se kell neki annyi.<\/p>\n<p>No, l\u00e1ssuk, mit kapunk h\u00e1t a 2008-ban?<\/p>\n<p>1. DATE t\u00edpus. 0001-01-01 \u00e9s 9999-12-31 k\u00f6z\u00f6tt m\u0171k\u00f6dik, \u00e9s csak 3 byte-ot eszik. Nyilv\u00e1n nap a felbont\u00e1sa.<\/p>\n<p>2. TIME t\u00edpus. Maximum 100ns felbont\u00e1s\u00fa, lehet szab\u00e1lyozni, mennyire legyen pontos. TIME(7) pl. 100ns-os, \u00e9s 5 byte-os ig\u00e9nyel. TIME(0) csak 3 byte, cser\u00e9be csak sz\u00e1zad mp-ig pontos. M\u00e9g egy p\u00e9ldak\u00e9nt TIME(4) 4 byte, \u00e9s 3-4 digitig pontos (kb. ms-os felbont\u00e1s).<\/p>\n<p>3. DATETIME2. Az el\u0151z\u0151 kett\u0151 hibridje, 6-8 byte kell neki, nyilv\u00e1n az id\u0151 tag pontoss\u00e1g\u00e1t\u00f3l f\u00fcgg\u0151en. <\/p>\n<p>4. DATETIMEOFFSET t\u00edpus. A DATETIME2 id\u0151z\u00f3n\u00e1val kieg\u00e9sz\u00edtett v\u00e1ltozata. Stringk\u00e9nt \u00edgy szoktuk le\u00edrni: &#8216;2007-05-08 12:35:29.1234567+12:15, azaz plusz 12 \u00f3ra 15 perc az id\u0151eltol\u00f3d\u00e1s. <\/p>\n<p>Ami izgi k\u00e9rd\u00e9s, hogyan l\u00e1tszanak ezek a t\u00edpusok ADO.NET-b\u0151l, r\u00e1ad\u00e1sul, mit l\u00e1tunk 2.0-b\u00f3l, \u00e9s mit a 3.5-b\u0151l, ami m\u00e1r fel van k\u00e9sz\u00edtve az \u00faj t\u00edpusokra?<\/p>\n<p>El\u0151sz\u00f6r n\u00e9zz\u00fck a 3.5-\u00f6t. Az SqlDbType-ban k\u00e9sz\u00fclt n\u00e9gy \u00faj \u00e9rt\u00e9k:<\/p>\n<p>SqlDbType.Date<br \/>\nSqlDbType.Time<br \/>\nSqlDbType.DateTime2<br \/>\nSqlDbType.DateTimeOffSet<\/p>\n<p>Az SQL DATE \u00e9s DATETIME2 a CLR megszokott DateTime t\u00edpus\u00e1ra k\u00e9pz\u0151dik le. A TIME a TimeSpanra, a DATETIMEOFFSET pedig egy \u00faj CLR t\u00edpusra a System.DateTimeOffsetre alakul \u00e1t. B\u0151vebben <a href=\"http:\/\/msdn2.microsoft.com\/en-us\/library\/bb675218(VS.90).aspx\">itt<\/a>.<\/p>\n<p><a href=\"http:\/\/msdn2.microsoft.com\/en-us\/library\/system.datetimeoffset(VS.90).aspx\">Ez alapj\u00e1n<\/a> a .NET fw. 2.0 SP1 \u00e9s 3.0 SP1 is tartalmazza a DateTimeOffset-et. Furcsa m\u00f3d, reflectorral megn\u00e9zve a 3.5-\u00f6s mscorlibet nem tal\u00e1ltam benne ezt az \u00faj t\u00edpust. VS 2008 l\u00e1tja. A 2.0-s mscorlib-ben l\u00e1tja. Bugos a reflector?<\/p>\n<p>R\u00e9gebbi kliensek szerintem byte[]-k\u00e9nt l\u00e1tj\u00e1k az DateTimeOffSet-et, de most nem tudom tesztelni.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>H\u00e1t igen, m\u00e1r az SQL Server 2005-ben is \u00fagy volt, hogy lesz DATE \u00e9s TIME t\u00edpus. Meg is \u00edrt\u00e1k CLR t\u00edpusk\u00e9nt, azt\u00e1n&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,25,6,4,30,58],"tags":[],"class_list":["post-355","post","type-post","status-publish","format-standard","hentry","category-net","category-adonet","category-adatbazisok","category-szakmai-elet","category-sql-server","category-sql-server-2008"],"_links":{"self":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/355","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=355"}],"version-history":[{"count":0,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/355\/revisions"}],"wp:attachment":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=355"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=355"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=355"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}