Jeszcze

Konwertuj pole DateTime na Just Date w wyrażeniu etykiety

Konwertuj pole DateTime na Just Date w wyrażeniu etykiety


Mam pole DateTime (np. CreatedDate) i chciałbym wyświetlić tylko datę z etykietą. Jak skonfigurować wyrażenie etykiety, aby to zrobić za pomocą Pythona?


To zabawne, że interpreter Pythona (kalkulator pola) traktuje pola daty i godziny Arcgis jako teksty Unicode. aby wyodrębnić datę z tego ciągu, powinniśmy przekonwertować ją na datetime, a następnie wyodrębnić datę, a następnie przekonwertować na ciąg!

Samodzielny kod (zakładając, że masz sformatowaną datę i godzinę, jak10.08.2015 3:24:53):

print str(datetime.datetime.strptime(u'10.08.2015 3:24:53 AM',"%m/%d/%Y %H:%M:%S %p").date())

wyrażenie etykiety (parser Pythona):

def FindLabel ( [DateModified] ): return str(datetime.datetime.strptime([DateModified],"%m/%d/%Y %H:%M:%S %p").date())

Data w polu DateTime to pierwsze 10 znaków pola.

Wypróbowałem następujące w polu zwanym last_edited_date.

W wyrażeniu etykiety ustaw parser na Pythona.

Zaznacz pole Zaawansowane i ustaw swoje wyrażenie na następujące:

def FindLabel ( [ostatnia_edytowana_data] ): return [ostatnia_edytowana_data][:10]

I zmień last_edited_date do tego, jak się nazywa twoje pole. Kluczem jest tutaj użycie zdolności cięcia ciągów Pythona. To jest, [:10] aby uzyskać pierwsze 10 znaków pola.

Wyniki wyglądają tak:


Sformatuj pole daty i czasu

Typy danych daty i godziny mają wiele różnych formatów, aby sprostać wyjątkowym okolicznościom. Podczas formatowania masz trzy możliwości: zachowaj formaty domyślne, zastosuj format wstępnie zdefiniowany lub utwórz format niestandardowy. Po zastosowaniu formatu do pola tabeli ten sam format jest automatycznie stosowany do dowolnego formantu formularza lub raportu, który zostanie następnie powiązany z tym polem tabeli. Formatowanie zmienia tylko sposób wyświetlania danych i nie wpływa na sposób przechowywania danych ani sposób wprowadzania danych przez użytkowników.


5 odpowiedzi 5

Wydaje się, że to działa i zachowuje precyzję:

CAST to DATETIME2(7) konwertuje wartość TIME(7) ( @T ) na DATETIME2 gdzie częścią daty jest '1900-01-01' , która jest domyślną wartością typów daty i czasu (zobacz datetime2 i komentarz * na stronie CAST i CONVERT w witrynie MSDN.)

* . Gdy dane znakowe, które reprezentują tylko datę lub tylko składniki czasu, są rzutowane na typy danych datetime lub smalldatetime, nieokreślony składnik czasu jest ustawiany na 00:00:00.000, a nieokreślony składnik daty jest ustawiony na 1900-01-01.

Funkcje DATEADD() i DATEDIFF() zajmują się resztą, czyli dodawaniem różnicy w dniach między 1900-01-01 a wartością DATE ( @D ).

Jak zauważył @Quandary, powyższe wyrażenie jest uważane za niedeterministyczne przez SQL Server. Jeśli chcemy wyrażenia deterministycznego, powiedzmy, ponieważ ma być używane dla kolumny PERSISTED, '19000101' ** należy zastąpić 0 lub CONVERT(DATE, '19000101', 112) :

**: DATEDIFF(dzień, '19000101', d) nie jest deterministyczny, ponieważ ma niejawną konwersję ciągu na DATETIME, a konwersje z ciągów na datetime są deterministyczne tylko wtedy, gdy używane są określone style.


11 odpowiedzi 11

Jeśli typ kolumny to DateTime w SQL, będzie przechowywać czas, w którym podajesz lub nie.

Lepiej byłoby poprawnie zapisać datę:

a następnie sformatuj go, gdy chcesz go wyświetlić:

Lub jeśli używasz EditorFor:

Aby dodać właściwość do swojego modelu, dodaj ten kod:

Chcę tylko wyjaśnić tę odpowiedź, że mówiąc „Jeśli używasz EditorFor”, oznacza to, że musisz mieć szablon EditorFor dla typu wartości, którą próbujesz reprezentować.

Szablony edytora to fajny sposób zarządzania powtarzającymi się kontrolkami w MVC:

Można ich używać do typów naiwnych, takich jak String, tak jak to zrobiłem powyżej, ale są one szczególnie przydatne do tworzenia szablonu zestawu pól wejściowych dla bardziej skomplikowanego typu danych.

Po prostu musiałem sobie poradzić z tym scenariuszem - znalazłem naprawdę łatwy sposób na zrobienie tego, po prostu dodaj adnotację do swojej właściwości w modelu w ten sposób:

Ukryje również przycisk czasu z selektora daty.

Przepraszam, jeśli ta odpowiedź jest trochę spóźniona )

Działa to, jeśli chcesz wyświetlić w TextBox:

Data/godzina w bazie danych nie będzie sformatowany wersja w ogóle. To będzie tylko data/czas. Jak ty pokaz ta data/godzina, kiedy wyodrębniasz wartość z bazy danych, to inna sprawa. Podejrzewam, że naprawdę chcesz po prostu:

Tak, jeśli spojrzysz na bazę danych za pomocą SQL Server Studio lub cokolwiek innego, zobaczysz teraz północ — ale to nieistotne, a kiedy pobierzesz datę z bazy danych i wyświetlisz ją użytkownikowi, następnie możesz zastosować odpowiedni format.

EDYCJA: Jeśli chodzi o twoje edytowane pytanie, problem nie dotyczy modelu - chodzi o to, jak określasz widok. Powinieneś użyć czegoś takiego:

gdzie d jest specyfikatorem standardowego formatu daty i godziny dla wzorca daty krótkiej (co oznacza, że ​​uwzględni bieżące ustawienia kulturowe).

To jest część, którą wielokrotnie powtarzałem – że kiedy ty wyświetlać użytkownikowi datę/godzinę, nadszedł czas, aby sformatować ją jako datę bez godziny.

EDYCJA: Jeśli to nie zadziała, powinien istnieć sposób na udekorowanie modelu lub widoku za pomocą ciągu formatu - lub coś w tym stylu. Tak naprawdę nie jestem osobą MVC, ale czuję się jak tam powinienem być dobrym sposobem na zrobienie tego deklaratywnie.


Funkcje daty i godziny w standardowym SQL

Wszystkie wyjścia są automatycznie formatowane zgodnie z ISO 8601, oddzielając datę i godzinę za pomocą T .

CURRENT_DATETIME

Opis

Zwraca bieżący czas jako obiekt DATETIME. Nawiasy są opcjonalne, gdy są wywoływane bez argumentów.

Ta funkcja obsługuje opcjonalny parametr strefy czasowej. Zobacz Definicje stref czasowych, aby uzyskać informacje na temat określania strefy czasowej.

Zwróć typ danych

Gdy istnieje kolumna o nazwie bieżąca_data_godzina, nazwa kolumny i wywołanie funkcji bez nawiasów są niejednoznaczne. Aby zapewnić wywołanie funkcji, dodaj nawiasy, aby zapewnić nazwę kolumny, zakwalifikuj ją za pomocą zmiennej zakresu. Na przykład następujące zapytanie wybierze funkcję w kolumnie now i kolumnę tabeli w kolumnie current_datetime.

DATA GODZINA

Opis

  1. Konstruuje obiekt DATETIME przy użyciu wartości INT64 reprezentujących rok, miesiąc, dzień, godzinę, minutę i sekundę.
  2. Konstruuje obiekt DATETIME przy użyciu obiektu DATE i opcjonalnego obiektu TIME.
  3. Konstruuje obiekt DATETIME przy użyciu obiektu TIMESTAMP. Obsługuje opcjonalny parametr do określenia strefy czasowej. Jeśli nie określono strefy czasowej, używana jest domyślna strefa czasowa UTC.

Zwróć typ danych

WYCIĄG

Opis

Zwraca wartość, która odpowiada określonej części z podanego datetime_expression .

  • MIKROSEKUNDA
  • MILISEKUND
  • DRUGA
  • MINUTA
  • GODZINA
  • DZIEŃ TYGODNIA
  • DZIEŃ
  • DZIEŃROKU
  • WEEK : Zwraca numer tygodnia daty z zakresu [0, 53]. Tygodnie zaczynają się od niedzieli, a daty poprzedzające pierwszą niedzielę roku są w tygodniu 0.
  • WEEK(<WEEKDAY>) : Zwraca numer tygodnia wyrażenia_daty-godziny w zakresie [0, 53]. Tygodnie zaczynają się w DZIEŃ TYGODNIA. daty i godziny przed pierwszym DZIEŃ.TYGODNIEM roku znajdują się w tygodniu 0. Prawidłowe wartości dla DZIEŃ.TYGOD. to NIEDZIELA , PONIEDZIAŁEK , WTOREK , ŚRODA , CZWARTEK , PIĄTEK i SOBOTA .
  • ISOWEEK : Zwraca numer tygodnia ISO 8601 wyrażenia datetime_expression . ISOWEEK rozpoczyna się w poniedziałek. Zwracane wartości mieszczą się w zakresie [1, 53]. Pierwszy ISOWEEK każdego roku ISO rozpoczyna się w poniedziałek przed pierwszym czwartkiem roku kalendarzowego gregoriańskiego.
  • MIESIĄC
  • JEDNA CZWARTA
  • ROK
  • ISOYEAR : Zwraca rok numerowania tygodni ISO 8601, który jest rokiem kalendarza gregoriańskiego zawierającym czwartek tygodnia, do którego należy date_expression.
  • DATA
  • CZAS

Zwracane wartości skracają okresy czasu niższego rzędu. Na przykład podczas wyodrębniania sekund funkcja EXTRACT obcina wartości milisekund i mikrosekund.

Zwróć typ danych

INT64 , z wyjątkiem następujących przypadków:

W poniższym przykładzie EXTRACT zwraca wartość odpowiadającą części czasu HOUR.

W poniższym przykładzie EXTRACT zwraca wartości odpowiadające różnym częściom czasu z kolumny daty i godziny.

W poniższym przykładzie datetime_expression wypada w niedzielę. EXTRACT oblicza pierwszą kolumnę na podstawie tygodni rozpoczynających się w niedzielę, a drugą kolumnę na podstawie tygodni rozpoczynających się w poniedziałek.

DATETIME_ADD

Opis

Dodaje jednostki int64_expression części do obiektu DATETIME.

DATETIME_ADD obsługuje następujące wartości dla części :

  • MIKROSEKUNDA
  • MILISEKUND
  • DRUGA
  • MINUTA
  • GODZINA
  • DZIEŃ
  • TYDZIEŃ . Ekwiwalent 7 DNI s.
  • MIESIĄC
  • JEDNA CZWARTA
  • ROK

Wymagana jest specjalna obsługa w przypadku części MIESIĄC, KWARTALNIK i ROK, gdy data przypada na ostatni dzień miesiąca (lub w jego pobliżu). Jeśli wynikowy miesiąc ma mniej dni niż pierwotny dzień DATETIME's, dniem wyniku jest ostatni dzień nowego miesiąca.

Zwróć typ danych

DATETIME_SUB

Opis

Odejmuje jednostki int64_expression części od DATETIME .

DATETIME_SUB obsługuje następujące wartości dla części:

  • MIKROSEKUNDA
  • MILISEKUND
  • DRUGA
  • MINUTA
  • GODZINA
  • DZIEŃ
  • TYDZIEŃ . Ekwiwalent 7 DNI s.
  • MIESIĄC
  • JEDNA CZWARTA
  • ROK

Wymagana jest specjalna obsługa w przypadku części MIESIĄC , KWARTAŁ i ROK , gdy data przypada na ostatni dzień miesiąca (lub w jego pobliżu). Jeśli wynikowy miesiąc ma mniej dni niż pierwotny dzień DATETIME 's, dniem wyniku jest ostatni dzień nowego miesiąca.

Zwróć typ danych

DATETIME_DIFF

Opis

Zwraca liczbę pełnych określonych interwałów części między dwoma obiektami DATETIME ( datetime_expression_a - datetime_expression_b ). Jeśli pierwsza DATETIME jest wcześniejsza niż druga, wyjście jest ujemne. Zgłasza błąd, jeśli obliczenie przepełnia typ wyniku, na przykład jeśli różnica w mikrosekundach między dwoma obiektami DATETIME spowoduje przekroczenie wartości INT64.

DATETIME_DIFF obsługuje następujące wartości dla części :

  • MIKROSEKUNDA
  • MILISEKUND
  • DRUGA
  • MINUTA
  • GODZINA
  • DZIEŃ
  • TYDZIEŃ : Ta data zaczyna się w niedzielę.
  • WEEK(<WEEKDAY>) : ta część daty zaczyna się w WEEKDAY . Prawidłowe wartości dla WEEKDAY to NIEDZIELA , PONIEDZIAŁEK , WTOREK , ŚRODA , CZWARTEK , PIĄTEK i SOBOTA .
  • ISOWEEK : Wykorzystuje granice tygodni ISO 8601. Tygodnie ISO zaczynają się w poniedziałek.
  • MIESIĄC
  • JEDNA CZWARTA
  • ROK
  • ISOYEAR : Używa granicy roku numeracji tygodni ISO 8601. Granica roku ISO to poniedziałek pierwszego tygodnia, którego czwartek należy do odpowiedniego roku kalendarzowego gregoriańskiego.

Zwróć typ danych

Powyższy przykład pokazuje wynik DATETIME_DIFF dla dwóch DATETIME s w odstępie 24 godzin. DATETIME_DIFF z częścią WEEK zwraca 1, ponieważ DATETIME_DIFF zlicza liczbę granic części w tym zakresie DATETIME s. Każdy TYDZIEŃ rozpoczyna się w niedzielę, więc istnieje granica jednej części między sobotą 14.10.2017 r. 00:00:00 a niedzielą 15.10.2017 r. 00:00:00 .

Poniższy przykład przedstawia wynik DATETIME_DIFF dla dwóch dat w różnych latach. DATETIME_DIFF z częścią daty YEAR zwraca 3, ponieważ zlicza liczbę granic roku kalendarzowego gregoriańskiego między dwiema wartościami DATETIME. DATETIME_DIFF z częścią daty ISOYEAR zwraca 2, ponieważ druga DATETIME należy do roku ISO 2015. Pierwszy czwartek roku kalendarzowego 2015 to 2015-01-01, więc rok ISO 2015 zaczyna się w poprzedni poniedziałek, 2014-12-29 .

Poniższy przykład pokazuje wynik DATETIME_DIFF dla dwóch dni z rzędu. Pierwsza data wypada w poniedziałek, a druga w niedzielę. DATETIME_DIFF z częścią daty WEEK zwraca 0, ponieważ ta część czasu używa tygodni rozpoczynających się w niedzielę. DATETIME_DIFF z częścią daty WEEK(MONDAY) zwraca 1. DATETIME_DIFF z częścią daty ISOWEEK również zwraca 1, ponieważ tygodnie ISO zaczynają się w poniedziałek.

DATETIME_TRUNC

Opis

Obcina obiekt DATETIME do szczegółowości części .

DATETIME_TRUNC obsługuje następujące wartości dla części:

  • MIKROSEKUNDA
  • MILISEKUND
  • DRUGA
  • MINUTA
  • GODZINA
  • DZIEŃ
  • TYDZIEŃ
  • WEEK(<WEEKDAY>) : obcina datetime_expression do granicy poprzedzającego tygodnia, gdzie tygodnie rozpoczynają się w WEEKDAY . Prawidłowe wartości dla WEEKDAY to NIEDZIELA , PONIEDZIAŁEK , WTOREK , ŚRODA , CZWARTEK , PIĄTEK i SOBOTA .
  • ISOWEEK : obcina datetime_expression do poprzedzającej granicy tygodnia ISO 8601. ISOWEEK rozpoczyna się w poniedziałek. Pierwszy ISOWEEK każdego roku ISO zawiera pierwszy czwartek odpowiedniego roku kalendarzowego gregoriańskiego. Każde wyrażenie_data wcześniejsze niż to zostanie skrócone do poprzedniego poniedziałku.
  • MIESIĄC
  • JEDNA CZWARTA
  • ROK
  • ISOYEAR : Obcina datetime_expression do poprzedniej granicy roku numerowania tygodni ISO 8601. Granica roku ISO to poniedziałek pierwszego tygodnia, którego czwartek należy do odpowiedniego roku kalendarzowego gregoriańskiego.

Zwróć typ danych

W poniższym przykładzie oryginalna DATETIME przypada na niedzielę. Ponieważ część to WEEK(MONDAY) , DATE_TRUNC zwraca DATETIME z poprzedniego poniedziałku.

W poniższym przykładzie oryginalne wyrażenie datetime_expression znajduje się w roku kalendarzowym gregoriańskim 2015. Jednak DATETIME_TRUNC z częścią daty ISOYEAR obcina datetime_expression do początku roku ISO, a nie do roku kalendarzowego gregoriańskiego. Pierwszy czwartek roku kalendarzowego 2015 przypadał na 01.01.2015, więc rok ISO 2015 rozpoczyna się w poprzedzający poniedziałek 29.12.2014. Dlatego granica roku ISO poprzedzająca wyrażenie_godzina_2015-06-15 00:00:00 to 2014-12-29.

FORMAT_DATETIME

Opis

Formatuje obiekt DATETIME zgodnie z określonym format_string . Zobacz Obsługiwane elementy formatu dla DATETIME, aby uzyskać listę elementów formatu obsługiwanych przez tę funkcję.

Zwróć typ danych

OSTATNI DZIEŃ

Opis

Zwraca ostatni dzień z wyrażenia daty i godziny, które zawiera datę. Jest to powszechnie używane do zwracania ostatniego dnia miesiąca.

Opcjonalnie można określić część daty, dla której zwracany jest ostatni dzień. Jeśli ten parametr nie jest używany, wartością domyślną jest MONTH . LAST_DAY obsługuje następujące wartości dla date_part :

  • ROK
  • JEDNA CZWARTA
  • MIESIĄC
  • TYDZIEŃ . Ekwiwalent 7 DNI s.
  • TYDZIEŃ(<TYdzień>) . <WEEKDAY> reprezentuje początkowy dzień tygodnia. Prawidłowe wartości to NIEDZIELA , PONIEDZIAŁEK , WTOREK , ŚRODA , CZWARTEK , PIĄTEK i SOBOTA .
  • ISOTYDZIEŃ . Wykorzystuje granice tygodni ISO 8601. Tygodnie ISO zaczynają się w poniedziałek.
  • ISOROK . Używa granicy roku numeracji tygodni ISO 8601. Granica roku ISO to poniedziałek pierwszego tygodnia, którego czwartek należy do odpowiedniego roku kalendarzowego gregoriańskiego.

Zwróć typ danych

Oba zwracają ostatni dzień miesiąca:

Zwraca ostatni dzień roku:

Zwraca ostatni dzień tygodnia dla tygodnia rozpoczynającego się w niedzielę:

Zwraca ostatni dzień tygodnia dla tygodnia rozpoczynającego się w poniedziałek:

PARSE_DATETIME

Opis

format_string zawiera elementy formatu, które definiują sposób formatowania datetime_string. Każdy element w datetime_string musi mieć odpowiedni element w format_string . Lokalizacja każdego elementu w format_string musi być zgodna z lokalizacją każdego elementu w datetime_string .

Ciąg formatu w pełni obsługuje większość elementów formatu, z wyjątkiem %Q , %a , %A , %g , %G , %j , %P , %u , %U , %V , %w i %W .

PARSE_DATETIME analizuje ciąg zgodnie z następującymi regułami:

  • Nieokreślone pola. Każde nieokreślone pole jest inicjowane od 1970-01-01 00:00:00.0 . Na przykład, jeśli rok jest nieokreślony, domyślnie przyjmuje wartość 1970 .
  • Nazwy bez uwzględniania wielkości liter. W nazwach, takich jak poniedziałek i luty , wielkość liter nie jest rozróżniana.
  • Biała przestrzeń. Jeden lub więcej kolejnych białych znaków w ciągu formatu dopasowuje zero lub więcej kolejnych białych znaków w ciągu DATETIME. Wiodące i końcowe spacje w ciągu DATETIME są zawsze dozwolone, nawet jeśli nie występują w ciągu formatu.
  • Pierwszeństwo formatu. Gdy dwa lub więcej elementów formatu ma nakładające się informacje, ostatni na ogół zastępuje wcześniejsze, z pewnymi wyjątkami. Na przykład zarówno %F, jak i %Y wpływają na rok, więc wcześniejszy element zastępuje późniejszy. Zobacz opisy %s , %C i %y w Obsługiwanych elementach formatu dla DATETIME.

Zwróć typ danych

Poniższe przykłady analizują literał STRING jako DATETIME .

Poniższy przykład analizuje literał STRING zawierający datę w formacie języka naturalnego jako DATETIME .

Obsługiwane elementy formatu dla DATETIME

O ile nie zaznaczono inaczej, funkcje DATETIME, które używają ciągów formatu, obsługują następujące elementy:

Formatuj element Opis Przykład
%ZA Pełna nazwa dnia tygodnia. środa
%za Skrócona nazwa dnia tygodnia. Poślubić
%B Pełna nazwa miesiąca. styczeń
%b lub %h Skrócona nazwa miesiąca. Jan
%DO Wiek (rok podzielony przez 100 i obcięty do liczby całkowitej) jako liczba dziesiętna (00-99). 20
%do Reprezentacja daty i godziny. śr 20 sty 21:47:00 2021
%RE Data w formacie %m/%d/%y. 01/20/21
%re Dzień miesiąca jako liczba dziesiętna (01-31). 20
%mi Dzień miesiąca jako liczba dziesiętna (1-31) pojedyncze cyfry są poprzedzone spacją. 20
%FA Data w formacie %Y-%m-%d. 2021-01-20
%SOL Rok ISO 8601 z wiekiem jako liczbą dziesiętną. Każdy rok ISO rozpoczyna się w poniedziałek przed pierwszym czwartkiem roku kalendarzowego gregoriańskiego. Zauważ, że %G i %Y mogą dawać różne wyniki w pobliżu granic roku gregoriańskiego, gdzie rok gregoriański i rok ISO mogą się różnić. 2021
%sol Rok ISO 8601 bez wieku jako liczba dziesiętna (00-99). Każdy rok ISO rozpoczyna się w poniedziałek przed pierwszym czwartkiem roku kalendarzowego gregoriańskiego. Zauważ, że %g i %y mogą dawać różne wyniki w pobliżu granic roku gregoriańskiego, gdzie rok gregoriański i rok ISO mogą się różnić. 21
%H Godzina (zegar 24-godzinny) jako liczba dziesiętna (00-23). 21
%JA Godzina (zegar 12-godzinny) jako liczba dziesiętna (01-12). 09
%jot Dzień roku jako liczba dziesiętna (001-366). 020
%k Godzina (zegar 24-godzinny) jako liczba dziesiętna (0-23) pojedyncze cyfry są poprzedzone spacją. 21
% l Godzina (zegar 12-godzinny) jako liczba dziesiętna (1-12) pojedyncze cyfry są poprzedzone spacją. 9
%M Minuta jako liczba dziesiętna (00-59).
%m Miesiąc jako liczba dziesiętna (01-12). 01
%n Znak nowego wiersza.
%P Albo przed południem, albo po południu. po południu
%p Albo rano, albo po południu. PO POŁUDNIU
%Q Kwartał jako liczba dziesiętna (1-4). 1
%R Czas w formacie %H:%M. 21:47
%r 12-godzinny czas zegarowy w notacji AM/PM. 21:47:00
%S Drugi jako liczba dziesiętna (00-60). 00
%s Liczba sekund od 1970-01-01 00:00:00. Zawsze zastępuje wszystkie inne elementy formatu, niezależnie od tego, gdzie w ciągu pojawia się %s. Jeśli pojawi się wiele elementów %s, pierwszeństwo ma ostatni. 1611179220
%T Czas w formacie %H:%M:%S. 21:47:00
%t Znak tabulacji.
%U Numer tygodnia w roku (niedziela jako pierwszy dzień tygodnia) jako liczba dziesiętna (00-53). 03
% u Dzień tygodnia (poniedziałek jako pierwszy dzień tygodnia) jako liczba dziesiętna (1-7). 3
%V Numer tygodnia ISO 8601 w roku (poniedziałek jako pierwszy dzień tygodnia) jako liczba dziesiętna (01-53). Jeśli tydzień zawierający 1 stycznia ma cztery lub więcej dni w nowym roku, to jest to tydzień 1, w przeciwnym razie jest to tydzień 53 poprzedniego roku, a następny tydzień to tydzień 1. 03
%W Numer tygodnia w roku (poniedziałek jako pierwszy dzień tygodnia) jako liczba dziesiętna (00-53). 03
% w Dzień tygodnia (niedziela jako pierwszy dzień tygodnia) jako liczba dziesiętna (0-6). 3
%X Reprezentacja czasu w formacie GG:MM:SS. 21:47:00
%x Reprezentacja daty w formacie MM/DD/RR. 01/20/21
% Y Rok z wiekiem jako liczbą dziesiętną. 2021
%y Rok bez wieku jako liczba dziesiętna (00-99), z opcjonalnym zerem wiodącym. Można mieszać z %C. Jeśli %C nie jest określony, lata 00-68 to lata 2000, a lata 69-99 to lata 1900. 21
%% Pojedynczy znak %. %
%E#S Sekundy z # cyframi ułamkowej precyzji. 00.000
%E*S Sekundy z pełną dokładnością ułamkową (dosłowny „*”). 00
%E4Y Lata czteroznakowe (0001 . 9999). Zauważ, że %Y tworzy tyle znaków, ile potrzeba do pełnego wyrenderowania roku. 2021

O ile nie zaznaczono inaczej, zawartość tej strony jest objęta licencją Creative Commons Attribution 4.0 License, a próbki kodu są objęte licencją Apache 2.0 License. Aby uzyskać szczegółowe informacje, zapoznaj się z Zasadami witryny Google Developers. Java jest zastrzeżonym znakiem towarowym firmy Oracle i/lub jej podmiotów stowarzyszonych.


Metody, których można użyć do przekazywania ciągów reprezentujących wartości daty/godziny między X++ i .NET, są następujące:

System.DateTime.GetDateTimeFormats (Wprowadź System.Char s.)

Ani System.Convert::ToString, ani System.DateTime.ToString nie wyprowadzają formatu, który może być wprowadzony przez DateTimeUtil::Parse.

Format ciągu ISO dla daty/godziny

Format wyjściowy DateTimeUtil::toStr i System.DateTime.GetDateTimeFormats to rrrr-mm-ddThh:mm:ss w formacie 24-godzinnym (bez końcowych AM i PM) z wiodącymi zerami. Na przykład 20 lipca 2007 o 13:45 zostanie wyświetlony jako 2007-07-20T13:45:00. Ten format ciągu jest standardem Międzynarodowej Organizacji Normalizacyjnej (ISO).

Ten format ciągu ISO jest wprowadzany do DateTimeUtil::parse i System.DateTime::Parse. aby przekonwertować ciąg na typ daty/godziny.

Próbka konwersji między datą/godziną a ciągiem

Poniższy przykład kodu X++ pokazuje, jak zgodne ciągi mogą być przesyłane między platformami .NET i X++ i konwertowane na zmienne daty/godziny.


Informacje o „wskazówkach dotyczących kontroli jakości”

Wskazówki W3C QA to krótkie dokumenty wyjaśniające przydatne fragmenty wiedzy dla programistów lub projektantów stron internetowych, hostowane i produkowane przez Grupę Zainteresowania Zapewnienia Jakości w W3C.

Chociaż wskazówki są dokładnie sprawdzane przez uczestników grupy, nie powinny być postrzegane jako nic innego niż pouczające fragmenty mądrości, a zwłaszcza są nie normatywne specyfikacje techniczne W3C.

Dowiedz się więcej o poradach, jak przesłać własne perły mądrości i znajdź wszystkie inne wskazówki dotyczące kontroli jakości w indeksie porad.

Prawa autorskie & kopia 1994-2006 W3C ® (MIT , ERCIM , Keio), Wszelkie prawa zastrzeżone. Obowiązują zasady odpowiedzialności W3C, znaków towarowych, używania dokumentów i licencjonowania oprogramowania. Twoje interakcje z tą witryną są zgodne z naszymi oświadczeniami publicznymi i oświadczeniami o prywatności Członków.


Nie możesz uzyskać pustego ciągu, ponieważ zwracasz typ wartości DATE z ISNULL .

Zwraca ten sam typ co check_expression. Jeśli jako check_expression podano literał NULL, zwraca typ danych replace_value. Jeśli jako check_expression podano literał NULL i nie podano wartości replace_value, zwraca int.

Jeśli sprawdzasz, czy wartość to NULL , nie ma potrzeby konwertowania jej na datę, chyba że chcesz zwrócić wartość daty (co nie wydaje się).

Data NULL to NULL (brak wartości). Z drugiej strony pusty ciąg zwraca 0 , co w SQL Server jest niejawnie liczbą całkowitą reprezentującą liczbę dni od 1900-01-01 .


Funkcje daty i czasu Impala

Podstawowe typy danych Impala dla danych daty i godziny to TIMESTAMP i DATE .

  • Ustawienie to jest domyślnie wyłączone, co oznacza, że ​​funkcje takie jak FROM_UNIXTIME() i UNIX_TIMESTAMP() uważają, że wartości wejściowe zawsze reprezentują strefę czasową UTC.
  • To ustawienie ma również zastosowanie, gdy CAST() wartość BIGINT na TIMESTAMP lub wartość TIMESTAMP na BIGINT . Gdy to ustawienie jest włączone, te funkcje i operacje są konwertowane do iz wartości reprezentujących lokalną strefę czasową. Zobacz Typ danych TIMESTAMP , aby uzyskać szczegółowe informacje o tym, jak Impala obsługuje kwestie strefy czasowej dla typu danych TIMESTAMP.

Odniesienie do funkcji:

Impala obsługuje następujące funkcje daty i czasu:

  • ADD_MONTHS
  • DODAJ
  • BIEŻĄCA DATA
  • CURRENT_TIMESTAMP
  • DATE_ADD
  • DATE_PART
  • DATE_SUB
  • DATE_TRUNC
  • DATA RÓŻNICA
  • DZIEŃ
  • NAZWA DNIA
  • DZIEŃ TYGODNIA
  • DZIEŃROKU
  • DAYS_ADD
  • DAYS_SUB
  • WYCIĄG
  • FROM_TIMESTAMP
  • OD_UNIXTIME
  • FROM_UTC_TIMESTAMP
  • GODZINA
  • HOURS_ADD
  • HOURS_SUB
  • INT_MONTHS_BETWEEN
  • MICROSECONDS_ADD
  • MICROSECONDS_SUB
  • MILISEKUND
  • MILLISECONDS_ADD
  • MILLISECONDS_SUB
  • MINUTA
  • MINUTES_ADD
  • MINUTES_SUB
  • MIESIĄC
  • NAZWA MIESIĄCA
  • MONTHS_ADD
  • MONTHS_BETWEEN
  • MONTHS_SUB
  • NANOSECONDS_ADD
  • NANOSECONDS_SUB
  • NASTĘPNY DZIEŃ
  • TERAZ
  • JEDNA CZWARTA
  • DRUGA
  • SECONDS_ADD
  • SECONDS_SUB
  • SUBDATE
  • PORA DNIA
  • TIMESTAMP_CMP
  • SPOTYKAĆ SIĘ Z KIMŚ
  • TO_TIMESTAMP
  • TO_UTC_TIMESTAMP
  • TRUNC
  • UNIX_TIMESTAMP
  • UTC_TIMESTAMP
  • WEEKOROKU
  • WEEKS_ADD
  • WEEKS_SUB
  • ROK
  • YEARS_ADD
  • YEARS_SUB

Uwagi dotyczące użytkowania:

To samo co MONTHS_ADD() . Dostępne w Impali 1.4 i wyższych. W celu zapewnienia zgodności podczas przenoszenia kodu z rozszerzeniami dostawcy.

ADDDATE(TIMESTAMP/DATE data,INT/BIGINT dni) Cel, powód: Dodaje dni do daty i zwraca nową wartość daty.

Wartość dni może być ujemna, co daje taki sam wynik jak funkcja SUBDATE().

Wszelkie odwołania do funkcji CURRENT_DATE() są oceniane na początku zapytania. Wszystkie wywołania CURRENT_DATE() w ramach tego samego zapytania zwracają tę samą wartość, a wartość nie zależy od tego, jak długo trwa zapytanie.

Typ zwrotu: DATA

CURRENT_TIMESTAMP() Cel, powód: Alias ​​funkcji TERAZ().

Typ zwrotu: ZNAK CZASU

DATE_ADD(TIMESTAMP/DATE data, INT/BIGINT dni), DATE_ADD(TIMESTAMP/DATE data,interval_expression) Cel, powód: Dodaje określoną liczbę dni do argumentu daty. Z wyrażeniem INTERVAL jako drugim argumentem można obliczyć wartość delta przy użyciu innych jednostek, takich jak tygodnie, lata, godziny, sekundy itd., Aby uzyskać szczegółowe informacje, zobacz Typ danych TIMESTAMP.

Poniższe przykłady pokazują skróconą notację wyrażenia INTERVAL, zamiast określania dokładnej liczby dni. Notacja INTERVAL pozwala również pracować z jednostkami mniejszymi niż jeden dzień.

Podobnie jak wszystkie funkcje daty/czasu, które zajmują się miesiącami, date_add() obsługuje nieistniejące daty po zakończeniu miesiąca, ustawiając datę na ostatni dzień miesiąca. Poniższy przykład pokazuje, jak nieistniejąca data 31 kwietnia jest znormalizowana do 30 kwietnia:

  • 0 jeśli daty są identyczne.
  • 1 jeśli data1 > data2 .
  • -1 jeśli data1 < data2 .
  • NULL jeśli data1 lub data2 ma wartość NULL .

Typ zwrotu: WEWN

DATE_PART(STRING część, TIMESTAMP / DATA data) Cel, powód: Podobny do EXTRACT() , z odwróconą kolejnością argumentów. Obsługuje te same jednostki daty i czasu co EXTRACT() . W celu zapewnienia zgodności z kodem SQL zawierającym rozszerzenia dostawcy.

Typ zwrotu: BIGINT

DATE_SUB(TIMESTAMP data rozpoczęcia, INT dni), DATE_SUB(TIMESTAMP data rozpoczęcia, wyrażenie_interwału) Cel, powód: Odejmuje określoną liczbę dni od wartości TIMESTAMP. Z wyrażeniem INTERVAL jako drugim argumentem można obliczyć wartość delta przy użyciu innych jednostek, takich jak tygodnie, lata, godziny, sekundy itd., Aby uzyskać szczegółowe informacje, zobacz Typ danych TIMESTAMP.

Poniższy przykład pokazuje najprostsze użycie, odjęcie określonej liczby dni od wartości TIMESTAMP:

Poniższe przykłady pokazują skróconą notację wyrażenia INTERVAL, zamiast określania dokładnej liczby dni. Notacja INTERVAL pozwala również pracować z jednostkami mniejszymi niż jeden dzień.

Podobnie jak wszystkie funkcje daty/czasu, które zajmują się miesiącami, date_add() obsługuje nieistniejące daty po zakończeniu miesiąca, ustawiając datę na ostatni dzień miesiąca. Poniższy przykład pokazuje, jak nieistniejąca data 31 kwietnia jest znormalizowana do 30 kwietnia:

DATE_TRUNC (jednostka STRING, ZNACZNIK CZASU / DATA ts) Cel, powód: Zwraca wartość ts obciętą do określonej jednostki .

Argument: W argumencie jednostki nie jest rozróżniana wielkość liter. Ten ciąg argumentów może być jednym z:

Jednostka Obsługiwane przez TIMESTAMP Obsługiwane przez DATE
„MIKROSEKUNDY” tak Nie
„MILISEKUND” tak Nie
'DRUGA' tak Nie
'MINUTA' tak Nie
'GODZINA' tak Nie
'DZIEŃ' tak tak
'TYDZIEŃ' tak tak
'MIESIĄC' tak tak
'ROK' tak tak
'DEKADA' tak tak
'STULECIE' tak tak
'TYSIĄCLECIE' tak tak

Dodano w: Impala 2.11.0

Uwagi dotyczące użytkowania:

Chociaż ta funkcja jest podobna do wywoływania funkcji TRUNC() z argumentem TIMESTAMP lub DATE, kolejność argumentów i rozpoznawanych jednostek jest inna w przypadku funkcji TRUNC() i DATE_TRUNC() . Dlatego te funkcje nie są wymienne.

Ta funkcja jest zwykle używana w zapytaniach GROUP BY do agregowania wyników z tej samej godziny, dnia, tygodnia, miesiąca, kwartału itd. Możesz również użyć tej funkcji w INSERT. SELECT do tabeli partycjonowanej, aby podzielić wartości TIMESTAMP lub DATE na odpowiednią partycję.

  • TIMESTAMP jeśli drugim argumentem, ts , jest TIMESTAMP .
  • DATA jeśli drugim argumentem, ts , jest DATA .

DATE_TRUNC('GODZINA', TERAZ()) zwraca 2017-12-05 13:00:00 .

DATE_TRUNC('MILLENNIUM', DATA'2019-08-02') zwraca 2001-01-01 .

DATEDIFF(TIMESTAMP/DATE data zakończenia, TIMESTAMP/DATE datastart) Cel, powód: Zwraca liczbę dni od daty początkowej do daty końcowej .

Jeśli enddate > startdate , zwracana wartość jest dodatnia.

Jeśli enddate < startdate , zwracana wartość jest ujemna.

Jeśli enddate = startdate , zwracana wartość wynosi zero.

Typ zwrotu: WEWN

Uwagi dotyczące użytkowania:

Części czasu w wartościach daty końcowej i daty rozpoczęcia są ignorowane. Na przykład 23:59 jednego dnia i 12:01 następnego dnia reprezentują DATEDIFF() -1, ponieważ wartości daty/czasu reprezentują różne dni, mimo że wartości TIMESTAMP różnią się tylko o 2 minuty.

DAY(TIMESTAMP/DATA data), DAYOFMONTH(TIMESTAMP/DATE date) Cel, powód: Zwraca wartość dnia z argumentu daty. Wartość reprezentuje dzień miesiąca, dlatego mieści się w zakresie 1-31 lub mniej dla miesięcy bez 31 dni.

Zwraca NULL dla nieistniejących dat, np. 30 lutego lub źle sformatowane ciągi daty, np. „1999-02-013”.

Typ zwrotu: WEWN

NAZWA DNIA(ZNACZNIK CZASU/DATA) Cel, powód: Zwraca nazwę dnia argumentu daty. Zakres zwracanych wartości to „niedziela” do „sobota” . Używany w zapytaniach generujących raporty, jako alternatywa dla wywoływania funkcji DAYOFWEEK() i przekształcania zwracanej wartości liczbowej na ciąg znaków za pomocą wyrażenia CASE.

Typ zwrotu: STRUNOWY

DZIEŃ TYGODNIA (ZNACZNIK CZASU/DATA) Cel, powód: Zwraca pole dnia argumentu daty odpowiadające dniowi tygodnia. Zakres wartości zwrotów to 1 (niedziela) do 7 (sobota).

Typ zwrotu: WEWN

DZIEŃROKU(ZNACZNIK CZASU/DATA) Cel, powód: Zwraca pole dnia z argumentu data odpowiadającego dniu roku. Zakres wartości zwrotu wynosi od 1 (1 stycznia) do 366 (31 grudnia roku przestępnego).

Typ zwrotu: WEWN

DAYS_ADD(TIMESTAMP/DATE data,INT/BIGINT dni) Cel, powód: Zwraca wartość z liczbą dni dodanych do daty .

Argument: W wartości argumentu jednostki nie jest rozróżniana wielkość liter. Ciąg jednostek może być jednym z:

Jednostka Obsługiwane przez TIMESTAMP ts Obsługiwane przez DATE ts
'EPOKA' tak Nie
„MILISEKUND” tak Nie
'DRUGA' tak Nie
'MINUTA' tak Nie
'GODZINA' tak Nie
'DZIEŃ' tak tak
'MIESIĄC' tak tak
'JEDNA CZWARTA' tak tak
'ROK' tak tak

Uwagi dotyczące użytkowania:

Zwykle używany w zapytaniach GROUP BY do porządkowania wyników według godziny, dnia, miesiąca itd. Możesz również użyć tej funkcji w INSERT. Instrukcja SELECT do wstawienia do tabeli partycjonowanej w celu podzielenia wartości TIMESTAMP na poszczególne części, jeśli tabela partycjonowana ma oddzielne kolumny kluczy partycji reprezentujące rok, miesiąc, dzień itd. Jeśli potrzebujesz podzielić przez bardziej złożone jednostki czasu, takie jak tydzień lub kwartał, użyj zamiast tego funkcji TRUNC().

Typ zwrotu: BIGINT

WYCIĄG (DZIEŃ OD DATY'2019-08-17') zwraca 17 .

Jeśli określisz „MILLISECOND” jako argument jednostki, funkcja zwróci składnik sekund i składnik milisekund.

EXTRACT(CAST('2006-05-12 18:27:28.123456789' AS TIMESTAMP), 'MILLISECOND') zwraca 28123 .

FROM_TIMESTAMP(TIMESTAMP data-godzina, wzorzec STRING), FROM_TIMESTAMP(STRING data-godzina, wzorzec STRING) Cel, powód: Konwertuje wartość TIMESTAMP na ciąg reprezentujący tę samą wartość.

Typ zwrotu: STRUNOWY

Uwagi dotyczące użytkowania:

Funkcja FROM_TIMESTAMP() zapewnia elastyczny sposób konwertowania wartości TIMESTAMP na dowolne formaty ciągów do celów raportowania.

Ponieważ Impala niejawnie konwertuje wartości ciągu na TIMESTAMP , możesz przekazać do tej funkcji wartości daty/czasu reprezentowane jako ciągi (w standardowym formacie rrrr-MM-dd GG:mm:ss.SSS). Wynik jest ciągiem zawierającym różne znaki separatora, kolejność pól, przeliterowane nazwy miesięcy lub inną odmianę reprezentacji ciągu daty/godziny.

Dozwolone tokeny dla łańcucha wzorca są takie same jak dla funkcji FROM_UNIXTIME().

FROM_UNIXTIME(BIGINT czas unix [, wzorzec STRING]) Cel, powód: Konwertuje liczbę sekund z epoki Uniksa na określony czas na ciąg w lokalnej strefie czasowej.

Typ zwrotu: STRUNOWY

Ciąg wzorca obsługuje następujący podzbiór Java SimpleDateFormat.

Wzór Opis
tak Rok
M Miesiąc
re Dzień
H Godzina
m Minuta
s druga
S Ułamek sekundy
+/-gg:mm Przesunięcie strefy czasowej
+/- ggmm Przesunięcie strefy czasowej
+/-hh Przesunięcie strefy czasowej

Do ciągu wzorcowego mają zastosowanie następujące zasady:

  • W ciągu wzorca rozróżniana jest wielkość liter.
  • All fields are variable length, and thus must use separators to specify the boundaries of the fields, with the exception of the time zone values.
  • Time zone offset formats must be at the end of the pattern string.
  • Formatting character groups can appear in any order along with any separators except for the time zone offset. Na przykład:
    • yyyy/MM/dd
    • dd-MMM-yy
    • (dd)(MM)(yyyy) HH:mm:ss
    • yyyy-MM-dd HH:mm:ss+hh:mm

    In Impala 1.3 and later, you can switch the order of elements, use alternative separator characters, and use a different number of placeholders for each unit. Adding more instances of y , d , H , and so on produces output strings zero-padded to the requested number of characters. The exception is M for months, where M produces a non-padded value such as 3 , MM produces a zero-padded value such as 03 , MMM produces an abbreviated month name such as Mar , and sequences of 4 or more M are not allowed.

    A date string including all fields could be 'yyyy-MM-dd HH:mm:ss.SSSSSS' , 'dd/MM/yyyy HH:mm:ss.SSSSSS' , 'MMM dd, yyyy HH.mm.ss (SSSSSS)' or other combinations of placeholders and separator characters.

    In Impala 2.2.0 and higher, built-in functions that accept or return integers representing TIMESTAMP values use the BIGINT type for parameters and return values, rather than INT . This change lets the date and time functions avoid an overflow error that would otherwise occur on January 19th, 2038 (known as the "Year 2038 problem" or "Y2K38 problem" ). This change affects the FROM_UNIXTIME() and UNIX_TIMESTAMP() functions. You might need to change application code that interacts with these functions, change the types of columns that store the return values, or add CAST() calls to SQL statements that call these functions.

    Usage notes:

    The way this function deals with time zones when converting to or from TIMESTAMP values is affected by the ‑‑use_local_tz_for_unix_timestamp_conversions startup flag for the impalad daemon. See TIMESTAMP Data Type for details about how Impala handles time zone considerations for the TIMESTAMP data type.

    FROM_UTC_TIMESTAMP(TIMESTAMP ts, STRING timezone) Purpose: Converts a specified UTC timestamp value into the appropriate value for a specified time zone.

    Return type: TIMESTAMP

    Usage notes: Often used to translate UTC time zone data stored in a table back to the local date and time for reporting. The opposite of the TO_UTC_TIMESTAMP() function.

    To determine the time zone of the server you are connected to, in Impala 2.3 and higher you can call the timeofday() function, which includes the time zone specifier in its return value. Remember that with cloud computing, the server you interact with might be in a different time zone than you are, or different sessions might connect to servers in different time zones, or a cluster might include servers in more than one time zone.

    See discussion of time zones in TIMESTAMP Data Type for information about using this function for conversions between the local time zone and UTC.

    HOUR(TIMESTAMP ts) Purpose: Returns the hour field from a TIMESTAMP field.

    Return type: INT

    HOURS_ADD(TIMESTAMP date, INT hours), HOURS_ADD(TIMESTAMP date, BIGINT hours) Purpose: Returns the specified date and time plus some number of hours.

    Return type: TIMESTAMP

    HOURS_SUB(TIMESTAMP date, INT hours), HOURS_SUB(TIMESTAMP date, BIGINT hours) Purpose: Returns the specified date and time minus some number of hours.

    Return type: TIMESTAMP

    INT_MONTHS_BETWEEN(TIMESTAMP / DATE enddate, TIMESTAMP / DATE startdate) Purpose: Returns the number of months from startdate to enddate , representing only the full months that passed.

    Return type: INT

    Added in: Impala 2.3.0

    Usage notes:

    Typically used in business contexts, for example to determine whether a specified number of months have passed or whether some end-of-month deadline was reached.

    The method of determining the number of elapsed months includes some special handling of months with different numbers of days that creates edge cases for dates between the 28th and 31st days of certain months. See MONTHS_BETWEEN() for details. The INT_MONTHS_BETWEEN() result is essentially the FLOOR() of the MONTHS_BETWEEN() result.

    If either value is NULL , which could happen for example when converting a nonexistent date string such as '2015-02-29' to a TIMESTAMP , the result is also NULL .

    If the first argument represents an earlier time than the second argument, the result is negative.

    LAST_DAY(TIMESTAMP / DATE ts) Purpose: Returns the beginning of the last calendar day in the same month of ts .

    • Returns TIMESTAMP if ts is of the TIMESTAMP type.
    • Returns DATE if ts is of the DATE type.

    Added in: Impala 2.9.0

    Usage notes:

    If the input argument does not represent a valid Impala TIMESTAMP including both date and time portions, the function returns NULL . For example, if the input argument is a string that cannot be implicitly cast to TIMESTAMP , does not include a date portion, or is out of the allowed range for Impala TIMESTAMP values, the function returns NULL .

    MICROSECONDS_ADD(TIMESTAMP date, INT microseconds), MICROSECONDS_ADD(TIMESTAMP date, BIGINT microseconds) Purpose: Returns the specified date and time plus some number of microseconds.

    Return type: TIMESTAMP

    MICROSECONDS_SUB(TIMESTAMP date, INT microseconds), MICROSECONDS_SUB(TIMESTAMP date, BIGINT microseconds) Purpose: Returns the specified date and time minus some number of microseconds.

    Return type: TIMESTAMP

    MILLISECOND(TIMESTAMP ts) Purpose: Returns the millisecond portion of a TIMESTAMP value.

    Return type: INT

    Added in: Impala 2.5.0

    Usage notes:

    The millisecond value is truncated, not rounded, if the TIMESTAMP value contains more than 3 significant digits to the right of the decimal point.

    MILLISECONDS_ADD(TIMESTAMP date, INT milliseconds), MILLISECONDS_ADD(TIMESTAMP date, BIGINT milliseconds) Purpose: Returns the specified date and time plus some number of milliseconds.

    Return type: TIMESTAMP

    MILLISECONDS_SUB(TIMESTAMP date, INT milliseconds), MILLISECONDS_SUB(TIMESTAMP date, BIGINT milliseconds) Purpose: Returns the specified date and time minus some number of milliseconds.

    Return type: TIMESTAMP

    MINUTE(TIMESTAMP date) Purpose: Returns the minute field from a TIMESTAMP value.

    Return type: INT

    MINUTES_ADD(TIMESTAMP date, INT minutes), MINUTES_ADD(TIMESTAMP date, BIGINT minutes) Purpose: Returns the specified date and time plus some number of minutes.

    Return type: TIMESTAMP

    MINUTES_SUB(TIMESTAMP date, INT minutes), MINUTES_SUB(TIMESTAMP date, BIGINT minutes) Purpose: Returns the specified date and time minus some number of minutes.

    Return type: TIMESTAMP

    MONTH(TIMESTAMP / DATE date) Purpose: Returns the month field, represented as an integer, from the date argument.

    Return type: INT

    MONTHNAME(TIMESTAMP / DATE date) Purpose: Returns the month name of the date argument.

    Return type: STRING

    MONTHS_ADD(TIMESTAMP / DATE date, INT / BIGINT months) Purpose: Returns the value with the number of months added to date .

    Usage notes:

    If date is the last day of a month, the return date will fall on the last day of the target month, e.g. MONTHS_ADD(DATE'2019-01-31', 1) returns DATE'2019-02-28' .

    MONTHS_BETWEEN(TIMESTAMP / DATE enddate, TIMESTAMP / DATE startdate) Purpose: Returns the number of months from startdate to enddate . This result can include a fractional part representing extra days in addition to the full months between the dates. The fractional component is computed by dividing the difference in days by 31 (regardless of the month).

    Return type: DOUBLE

    Added in: Impala 2.3.0

    Usage notes:

    Typically used in business contexts, for example to determine whether a specified number of months have passed or whether some end-of-month deadline was reached.

    If the only consideration is the number of full months and any fractional value is not significant, use INT_MONTHS_BETWEEN() instead.

    The method of determining the number of elapsed months includes some special handling of months with different numbers of days that creates edge cases for dates between the 28th and 31st days of certain months.

    If either value is NULL , which could happen for example when converting a nonexistent date string such as '2015-02-29' to a TIMESTAMP , the result is also NULL .

    If the first argument represents an earlier time than the second argument, the result is negative.

    The time portion of the input arguements are ignored.

    MONTHS_SUB(TIMESTAMP / DATE date, INT / BIGINT months) Purpose: Returns the value with the number of months subtracted from date .

    Usage notes:

    If date is the last day of a month, the return date will fall on the last day of the target month, e.g. MONTHS_SUB(DATE'2019-02-28', 1) returns DATE'2019-01-31' .

    NANOSECONDS_ADD(TIMESTAMP date, INT nanoseconds), NANOSECONDS_ADD(TIMESTAMP date, BIGINT nanoseconds) Purpose: Returns the specified date and time plus some number of nanoseconds.

    Return type: TIMESTAMP

    Kudu considerations:

    The nanosecond portion of an Impala TIMESTAMP value is rounded to the nearest microsecond when that value is stored in a Kudu table.

    NANOSECONDS_SUB(TIMESTAMP date, INT nanoseconds), NANOSECONDS_SUB(TIMESTAMP date, BIGINT nanoseconds) Purpose: Returns the specified date and time minus some number of nanoseconds.

    Return type: TIMESTAMP

    Kudu considerations:

    The nanosecond portion of an Impala TIMESTAMP value is rounded to the nearest microsecond when that value is stored in a Kudu table.

    NEXT_DAY(TIMESTAMP / DATE date, STRING weekday) Purpose: Returns the date of the weekday that follows the specified date .

    Argument: The weekday is not case-sensitive.

    The following values are accepted for weekday : "Sunday" / "Sun" , "Monday" / "Mon" , "Tuesday" / "Tue" , "Wednesday" / "Wed" , "Thursday" / "Thu" , "Friday" / "Fri" , "Saturday" / "Sat"

    • Returns TIMESTAMP if date is of the TIMESTAMP type.
    • Returns DATE if date is of the DATE type.

    NEXT_DAY('2013-12-25','Saturday') returns '2013-12-28 00:00:00' which is the first Saturday after December 25, 2013.

    NOW() Purpose: Returns the current date and time (in the local time zone) as a TIMESTAMP value.

    Return type: TIMESTAMP

    Usage notes:

    To find a date/time value in the future or the past relative to the current date and time, add or subtract an INTERVAL expression to the return value of NOW() . See TIMESTAMP Data Type for examples.

    To produce a TIMESTAMP representing the current date and time that can be shared or stored without interoperability problems due to time zone differences, use the TO_UTC_TIMESTAMP() function and specify the time zone of the server. When TIMESTAMP data is stored in UTC form, any application that queries those values can convert them to the appropriate local time zone by calling the inverse function, FROM_UTC_TIMESTAMP() .

    To determine the time zone of the server you are connected to, in Impala 2.3 and higher you can call the timeofday() function, which includes the time zone specifier in its return value. Remember that with cloud computing, the server you interact with might be in a different time zone than you are, or different sessions might connect to servers in different time zones, or a cluster might include servers in more than one time zone.

    Any references to the NOW() function are evaluated at the start of a query. All calls to NOW() within the same query return the same value, and the value does not depend on how long the query takes.

    QUARTER(TIMESTAMP / DATE date) Purpose: Returns the quarter in the input date argument as an integer value, 1, 2, 3, or 4, where 1 represents January 1 through March 31.

    Return type: INT

    SECOND(TIMESTAMP date) Purpose: Returns the second field from a TIMESTAMP value.

    Return type: INT

    SECONDS_ADD(TIMESTAMP date, INT seconds), SECONDS_ADD(TIMESTAMP date, BIGINT seconds) Purpose: Returns the specified date and time plus some number of seconds.

    Return type: TIMESTAMP

    SECONDS_SUB(TIMESTAMP date, INT seconds), SECONDS_SUB(TIMESTAMP date, BIGINT seconds) Purpose: Returns the specified date and time minus some number of seconds.

    Return type: TIMESTAMP

    SUBDATE(TIMESTAMP / DATE date, INT / BIGINT days) Purpose: Subtracts days from date and returns the new date value.

    The days value can be negative, which gives the same result as the ADDDATE() function.

    Return type: STRING

    Added in: Impala 2.3.0

    Usage notes: The result value represents similar information as the now() function, only as a STRING type and with somewhat different formatting. For example, the day of the week and the time zone identifier are included. This function is intended primarily for compatibility with SQL code from other systems that also have a timeofday() function. Prefer to use now() if practical for any new Impala code.

    If the first argument represents a later point in time than the second argument, the result is 1.

    If the first argument represents an earlier point in time than the second argument, the result is -1.

    If the first and second arguments represent identical points in time, the result is 0.

    If either argument is NULL , the result is NULL .

    Return type: INT (either -1, 0, 1, or NULL )

    Added in: Impala 2.3.0

    Usage notes:

    Usage notes: A comparison function for TIMESTAMP values that only tests whether the date and time increases, decreases, or stays the same. Similar to the SIGN() function for numeric values.

    TO_DATE(TIMESTAMP ts) Purpose: Returns a string representation of the date field from the ts argument.

    Return type: STRING

    TO_TIMESTAMP(BIGINT unixtime), TO_TIMESTAMP(STRING date, STRING pattern) Purpose: Converts an integer or string representing a date/time value into the corresponding TIMESTAMP value.

    Return type: TIMESTAMP

    Added in: Impala 2.3.0

    Usage notes:

    An integer argument represents the number of seconds past the epoch (midnight on January 1, 1970). It is the converse of the UNIX_TIMESTAMP() function, which produces a BIGINT representing the number of seconds past the epoch.

    A string argument, plus another string argument representing the pattern, turns an arbitrary string representation of a date and time into a true TIMESTAMP value. The ability to parse many kinds of date and time formats allows you to deal with temporal data from diverse sources, and if desired to convert to efficient TIMESTAMP values during your ETL process. Using TIMESTAMP directly in queries and expressions lets you perform date and time calculations without the overhead of extra function calls and conversions each time you reference the applicable columns.

    The following examples demonstrate how to convert an arbitrary string representation to TIMESTAMP based on a pattern string:

    The following examples show how to convert a BIGINT representing seconds past epoch into a TIMESTAMP value:

    TO_UTC_TIMESTAMP(TIMESTAMP ts, STRING timezone) Purpose: Converts a specified timestamp value in a specified time zone into the corresponding value for the UTC time zone.

    Return type: TIMESTAMP

    Usage notes:

    Often used in combination with the now() function, to translate local date and time values to the UTC time zone for consistent representation on disk. The opposite of the FROM_UTC_TIMESTAMP() function.

    See discussion of time zones in TIMESTAMP Data Type for information about using this function for conversions between the local time zone and UTC.

    The simplest use of this function is to turn a local date/time value to one with the standardized UTC time zone. Because the time zone specifier is not saved as part of the Impala TIMESTAMP value, all applications that refer to such data must agree in advance which time zone the values represent. If different parts of the ETL cycle, or different instances of the application, occur in different time zones, the ideal reference point is to convert all TIMESTAMP values to UTC for storage.

    Once a value is converted to the UTC time zone by TO_UTC_TIMESTAMP() , it can be converted back to the local time zone with FROM_UTC_TIMESTAMP() . You can combine these functions using different time zone identifiers to convert a TIMESTAMP between any two time zones. This example starts with a TIMESTAMP value representing Pacific Daylight Time, converts it to UTC, and converts it to the equivalent value in Eastern Daylight Time.

    TRUNC(TIMESTAMP / DATE ts, STRING unit) Purpose: Returns the ts truncated to the unit specified.

    Argument: The unit argument is not case-sensitive. This argument string can be one of:


    5 Answers 5

    I checked your profile and saw that you are in the UK. If your sql server is set to use the dateformat dmy then that explains your issue. Without using the 'T' instead of the space in the datetime string, Sql Server won't recognize it as ISO8601 format.

    Querying using dates and/or datetimes can be tricky, to make sure you are getting what you are looking for I recommend reading:

    edit: to clarify the out of range value in your error message would be from interpreting the month as 30 and the day as 11.

    I do not understand why the data is being converted from varchar to datetime when 'Created' is set to datetime

    The literals you are providing for comparison to the Created column are strings. To compare those literals with the datetime column, SQL Server attempts to convert the strings to datetime types, according to the rules of data type precedence. Without explicit information about the format of the strings, SQL Server follows its convoluted rules for interpreting strings as datetimes.

    In my view, the neatest way to avoid these types of issues is to be explicit about types. SQL Server provides the CAST and CONVERT functions for this purpose. When working with strings and date/time types, CONVERT is to be preferred because it provides a style parameter to explicitly define the string format.

    The question uses strings in ODBC canonical (with milliseconds) format (style 121). Being explicit about the data type and string style results in the following:

    That said, there are good reasons (as Aaron points out in his answer) to use a half-open range instead of BETWEEN (I use style 120 below just for variety):

    Being explicit about types is a very good habit to get into, particularly when dealing with dates and times.


    Obejrzyj wideo: World Fart Championship 2018, Finland