Spis treści:

Kategoria:SQL Server


Konwersja datetime na nvarchar

Data i jej reprezentacja tekstowa

Z wyświetlaniem i przetwarzaniem dat od zawsze był problem. Nie ma znaczenia, czy to C, Java, SQL, czy jakikolwiek inny dokument istniejący poza światem informatyki. Czy zapisywać ją z kropkami, myślnikami, ukośnikami? Czy najpierw umieszczać rok, czy najpierw dzień miesiąca. A może sam miesiąc na początku? Jak odczytać datę 01/02/03? Które to dzień, które miesiąc, które rok? Takie dyskusje można prowadzić w nieskończoność i pewnie do niczego nie doprowadzą. Najwyżej do potwierdzenia teorii, że gdzie dwie osoby, tam trzy różne zdania. Przyznam się, że niejednokrotnie musiałem szukać tej informacji i dobierać odpowiedni format. Dokumentacja MSDN jest tak obszerna, że odnajdywanie w niej potrzebnej informacji nie jest takie trywialne. Postanowiłem zrobić sobie pomocniczą tabelkę, która, mam nadzieję, przyda się także innym. W przykładach zastosowałem jednolite rzutowanie na typ nvarchar, ale o ile nie stosujemy kalendarza muzułmańskiego (Hijri), można stosować rzutowanie na typ varchar. Przy okazji polecam wpis na temat różnic pomiędzy varchar i nvarchar.

Tabela formatów daty

Przyjrzyjmy się zatem obiecanemu zestawieniu formatów, przykładowym wywołaniom i ich wynikowi, czyli reprezentacji tekstowej. Wszystkie wartości reprezentują dzień 17 lipca, 2013, godzinę 17:37, 46 sekund i 60 tysięcznych części sekundy.

FormatKod T-SQLRezultat
0CONVERT(nvarchar(30), GETDATE(), 0)Jul 17 2013 5:37PM
1CONVERT(nvarchar(30), GETDATE(), 1)07/17/13
2CONVERT(nvarchar(30), GETDATE(), 2)13.07.17
3CONVERT(nvarchar(30), GETDATE(), 3)17/07/13
4CONVERT(nvarchar(30), GETDATE(), 4)17.07.13
5CONVERT(nvarchar(30), GETDATE(), 5)17-07-13
6CONVERT(nvarchar(30), GETDATE(), 6)17 Jul 13
7CONVERT(nvarchar(30), GETDATE(), 7)Jul 17, 13
8CONVERT(nvarchar(30), GETDATE(), 8)17:37:46
9CONVERT(nvarchar(30), GETDATE(), 9)Jul 17 2013 5:37:46:060PM
10CONVERT(nvarchar(30), GETDATE(), 10)07-17-13
11CONVERT(nvarchar(30), GETDATE(), 11)13/07/17
12CONVERT(nvarchar(30), GETDATE(), 12)130717
13CONVERT(nvarchar(30), GETDATE(), 13)17 Jul 2013 17:37:46:060
14CONVERT(nvarchar(30), GETDATE(), 14)17:37:46:060
20CONVERT(nvarchar(30), GETDATE(), 20)2013-07-17 17:37:46
21CONVERT(nvarchar(30), GETDATE(), 21)2013-07-17 17:37:46.060
100CONVERT(nvarchar(30), GETDATE(), 100)Jul 17 2013 5:37PM
101CONVERT(nvarchar(30), GETDATE(), 101)07/17/2013
102CONVERT(nvarchar(30), GETDATE(), 102)2013.07.17
103CONVERT(nvarchar(30), GETDATE(), 103)17/07/2013
104CONVERT(nvarchar(30), GETDATE(), 104)17.07.2013
105CONVERT(nvarchar(30), GETDATE(), 105)17-07-2013
106CONVERT(nvarchar(30), GETDATE(), 106)17 Jul 2013
107CONVERT(nvarchar(30), GETDATE(), 107)Jul 17, 2013
108CONVERT(nvarchar(30), GETDATE(), 108)17:37:46
109CONVERT(nvarchar(30), GETDATE(), 109)Jul 17 2013 5:37:46:060PM
110CONVERT(nvarchar(30), GETDATE(), 110)07-17-2013
111CONVERT(nvarchar(30), GETDATE(), 111)2013/07/17
112CONVERT(nvarchar(30), GETDATE(), 112)20130717
113CONVERT(nvarchar(30), GETDATE(), 113)17 Jul 2013 17:37:46:060
114CONVERT(nvarchar(30), GETDATE(), 114)17:37:46:060
120CONVERT(nvarchar(30), GETDATE(), 120)2013-07-17 17:37:46
121CONVERT(nvarchar(30), GETDATE(), 121)2013-07-17 17:37:46.060
126CONVERT(nvarchar(30), GETDATE(), 126)2013-07-17T17:37:46.060
127CONVERT(nvarchar(30), GETDATE(), 127)2013-07-17T17:37:46.060
130CONVERT(nvarchar(30), GETDATE(), 130)10 رمضان 1434 5:37:46:060PM
131CONVERT(nvarchar(30), GETDATE(), 131)10/09/1434 5:37:46:060PM

Kategoria:SQL Server

, 2013-12-20

Brak komentarzy - bądź pierwszy

Dodaj komentarz
Wyślij
Ostatnie komentarze
To samo pytanie co wyżej. Mam za zadanie dodać kolumnę do istniejącej tabeli łącząc obie inne kolumny ze sobą, ale nie mam pojęcia jak za to się zabrać
działa :) tylko była literówka :)
Podziękował. Trochę późno, po 8 latach, ale dzięki za testy (rozumiem że dla SQL2012 robione). Tak się właśnie zastanawiałem ile złego czynię stosując czasem __(max).
Super robota, korzystając z innych internetowych kalkulatorow po prostu wątpiłem w ich prawdomówność, w końcu trafiłem tutaj i wynik w końcu jest wiarygodny. 40 km w 2 h 810 kcal, ciekawostka: na fitatu wyliczyło mi 5700 kcal 😊 najlepiej będzie chyba jak kupię zegarek sportowy.
Wielkie dzieki za solidne wyjasnienia tematu.