Több

Konvertálja a DateTime mezőt Just Date-re a címkekifejezésben

Konvertálja a DateTime mezőt Just Date-re a címkekifejezésben


Van egy DateTime mező (pl .: CreatedDate), és csak a címkét szeretném megjeleníteni. Hogyan állítsam be a címke kifejezést erre a python használatával?


Vicces, hogy a python tolmács (mezőszámoló) az Arcgis dátum és idő mezőket unicode szövegként kezeli. hogy kivonjuk a dátumot ebből a karaktersorozatból, konvertálnunk kell azt dátumidőre, majd kibontani a dátumot, majd konvertálni stringre!

Önálló kód (feltételezve, hogy a dátumidő formázása hasonló2015.10.08. 3:24:53):

print str (datetime.datetime.strptime (u'10 / 8/2015 3:24:53 AM ', "% m /% d /% Y% H:% M:% S% p"). dátum ())

címke kifejezés (python elemző):

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

A DateTime mező dátuma a mező első 10 karaktere.

Nevű mezőn a következőket próbáltam ki last_edited_date.

A címkekifejezésben állítsa az elemzőt Pythonra.

Jelölje be a Haladó jelölőnégyzetet, és állítsa a következőre a kifejezést:

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

És változtatni last_edited_date bármire is hívják a területét. A legfontosabb itt a python karakterlánc-szeletelő képességének használata. Vagyis [:10] hogy megkapja a mező első 10 karakterét.

Az eredmények így néznek ki:


Formázza a dátum és idő mezőt

A dátum és idő adattípusok sokféle formátummal rendelkeznek, hogy megfeleljenek az egyedi körülményeknek. Formázáskor három lehetőség közül választhat: megtartja az alapértelmezett formátumokat, alkalmaz egy előre definiált formátumot, vagy létrehoz egy egyedi formátumot. Ha alkalmazzon egy formátumot egy táblamezőre, ugyanez a formátum automatikusan alkalmazandó minden olyan űrlapra vagy jelentésvezérlőre, amelyet később az adott táblamezőhöz köt. A formázás csak az adatok megjelenítésének módját változtatja meg, és nem befolyásolja az adatok tárolásának módját, illetve azt, hogy a felhasználók hogyan adhatják meg az adatokat.


5 válasz 5

Úgy tűnik, hogy ez működik és megtartja a pontosságot is:

A CAST DATETIME2-re (7) a TIME (7) értéket (@T) DATETIME2-vé alakítja, ahol a dátum része '1900-01-01', amely a dátum- és dátumidő-típusok alapértelmezett értéke (lásd: datetime2 és a megjegyzés * a CAST és CONVERT oldalon az MSDN-nél.)

*. Ha a csak dátumot vagy csak az idõkomponenseket ábrázoló karakteradatokat a datetime vagy a smalldatetime adattípusokra öntjük, a nem meghatározott idõkomponens értéke 00: 00: 00 000, és a meghatározatlan dátumkomponens értéke 1900-01-01.

A DATEADD () és a DATEDIFF () függvény gondoskodik a többiről, vagyis összeadja az 1900-01-01 és a DATE érték (@D) közötti napok közötti különbséget.

Amint azt a @Quandary észrevette, a fenti kifejezést az SQL Server nem determinisztikusnak tekinti. Ha determinisztikus kifejezést akarunk, mondjuk azért, mert azt a PERSISTED oszlophoz kell használni, akkor az '19000101' ** -ot 0-val vagy CONVERT-re kell cserélni (DATE, '19000101', 112):

**: A DATEDIFF (day, '19000101', d) nem determinisztikus, mivel implicit módon konvertálja a karakterláncot DATETIME-ra, a karakterláncokból dátumidővé történő konverziók pedig csak meghatározott stílusok használata esetén.


11 válasz 11

Ha az oszlop típusa DateTime az SQL-ben, akkor egy olyan időt tárol, ahol elhalad, vagy sem.

Jobb lenne a dátum megfelelő mentése:

majd formázza, amikor megjelenítenie kell:

Vagy ha a EditorFor alkalmazást használja:

Tulajdonság hozzáadásához a modelljéhez adja hozzá ezt a kódot:

Csak azt szeretném tisztázni erre a válaszra, hogy az 'Ha az EditorFor használatával' mondásommal azt jelenti, hogy rendelkeznie kell egy EditorFor sablonnal ahhoz az értéktípushoz, amelyet képviselni próbál.

A szerkesztő sablonok jó módszerek az MVC ismétlődő vezérléseinek kezelésére:

Használhatja őket olyan naiv típusokhoz, mint a String, mint ahogy azt fentebb tettem, de különösen nagyszerűek abban, hogy egy bonyolultabb adattípushoz bemeneti mezők készletét sablonozhassa.

Csak magamnak kellett megbirkóznom ezzel a forgatókönyvvel - megtaláltam ennek nagyon egyszerű módját, egyszerűen jegyezd fel ingatlanodat a következő modellben:

Elrejti az időgombot a dátumválasztó elől is.

Sajnálom, ha ez a válasz kissé elkésett)

Ez akkor működik, ha meg szeretné jeleníteni egy TextBoxban:

A dátum / idő a dátumbázisban nem lesz a formázva változat egyáltalán. Csak ez lesz a dátum / idő. Hogyan kijelző az a dátum / idő, amikor kivonja az értéket az adatbázisból, más kérdés. Határozottan gyanítom, hogy tényleg csak azt akarja:

Igen, ha megnézi az adatbázist az SQL Server Studio vagy bármi más segítségével, akkor most éjfél jelenik meg - de ez nem releváns, és amikor lekéri a dátumot az adatbázisból, és megjeleníti a felhasználónak, azután alkalmazhatja a megfelelő formátumot.

SZERKESZTÉS: A szerkesztett kérdéssel kapcsolatban a probléma nem a modellel van, hanem a nézet megadásának módjával. Ilyeneket használjon:

ahol d a rövid dátumminta szokásos dátum- és időformátum-specifikálója (ami azt jelenti, hogy figyelembe veszi az aktuális kulturális beállításokat).

Ennyit mondtam már többször - amikor te jelenítse meg a felhasználó számára a dátumot és az időt, itt az idő, hogy idő nélküli dátumként formázzuk.

SZERKESZTÉS: Ha ez nem működik, akkor meg kell oldani a modell vagy nézet formázási karakterlánccal történő díszítését - vagy valami hasonlót. Nem igazán vagyok MVC-s ember, de úgy érzem, mintha ott lennék kellene hogy ezt deklaratív módon meg lehessen tenni.


Dátumidő függvények a standard SQL-ben

Az összes kimenetet automatikusan formázzák az ISO 8601 szerint, a dátumot és az időt elválasztva egy T-vel.

CURRENT_DATETIME

Leírás

Az aktuális időt DATETIME objektumként adja vissza. A zárójelek nem kötelezőek, ha argumentum nélkül hívják őket.

Ez a funkció támogatja az opcionális időzóna paramétereket. Az időzóna meghatározásával kapcsolatban lásd: Időzóna-definíciók.

Vissza adattípus

Amikor a current_datetime nevű oszlop van, az oszlop neve és a zárójel nélküli függvényhívás nem egyértelmű. A függvényhívás biztosításához zárójeleket ad hozzá az oszlop nevének biztosításához, minősítse azt a tartomány változójával. Például a következő lekérdezés kiválasztja a függvényt a most oszlopban és a táblázat oszlopot az aktuális_dátumidő oszlopban.

DÁTUM IDŐ

Leírás

  1. DATETIME objektumot készít az év, hónap, nap, óra, perc és másodperc értékeket képviselő INT64 értékek felhasználásával.
  2. DATETIME objektum létrehozása DATE objektum és egy opcionális TIME objektum használatával.
  3. DATETIME objektumot készít egy TIMESTAMP objektum segítségével. Támogatja az opcionális paramétert az időzóna megadásához. Ha nincs megadva időzóna, akkor az alapértelmezett időzónát (UTC) kell használni.

Vissza adattípus

KIVONAT

Leírás

Visszaad egy értéket, amely megfelel a megadott résznek a megadott datetime_expressionból.

  • MIKROSZEKUNDUM
  • MILISZEKUNDUM
  • MÁSODIK
  • PERC
  • ÓRA
  • A HÉT NAPJA
  • NAP
  • DAYOFYEAR
  • HET: Visszaadja a dátum hétszámát a [0, 53] tartományban. A hét vasárnap kezdődik, és az év első vasárnapját megelőző időpontok a 0. héten vannak.
  • WEEK (& ltWEEKDAY & gt): Visszaadja a datetime_expression heti számát a [0, 53] tartományban. Hetek kezdődnek HÉTNAP. Az év első WEEKDAY előtti dátumidő a 0. hét. A WEEKDAY érvényes értékei: VASÁRNAP, HÉTFŐ, KEDD, SZERDA, CSÜTÖRTÖK, PÉNTEK és SZOMBAT.
  • ISOWEEK: Visszaadja a dátumidő_kifejezés ISO 8601 hetes számát. Az ISOWEEK hétfőn kezdődik. A visszatérési értékek az [1, 53] tartományba esnek. Minden ISO-év első ISOWEEK-je a gregorián naptári év első csütörtökét megelőző hétfőn kezdődik.
  • HÓNAP
  • NEGYED
  • ÉV
  • ISOYEAR: Az ISO 8601 hetes számozási évet adja vissza, amely a gregorián naptári év tartalmazza a hét csütörtökét, amelyhez a date_expression tartozik.
  • DÁTUM
  • IDŐ

A visszatérő értékek megcsonkítják az alacsonyabb rendű időszakokat. Például másodpercek kivonásakor az EXTRACT megcsonkítja az ezredmásodperc és a mikroszekundum értékeket.

Vissza adattípus

INT64, kivéve a következő eseteket:

A következő példában az EXTRACT a HOUR időrésznek megfelelő értéket ad vissza.

A következő példában az EXTRACT a különböző időrészeknek megfelelő értékeket adja vissza az időtartamok oszlopából.

A következő példában a datetime_expression vasárnapra esik. Az EXTRACT kiszámítja az első oszlopot a vasárnap kezdődő hetek felhasználásával, a második oszlopot pedig a hétfőn kezdődő hetek felhasználásával.

DATETIME_ADD

Leírás

Hozzáadja a rész int64_expression egységeit a DATETIME objektumhoz.

A DATETIME_ADD a következő értékeket támogatja a részhez:

  • MIKROSZEKUNDUM
  • MILISZEKUNDUM
  • MÁSODIK
  • PERC
  • ÓRA
  • NAP
  • HÉT. 7 DAY s-nak felel meg.
  • HÓNAP
  • NEGYED
  • ÉV

Különleges kezelésre van szükség a HÓNAP, NEGYEDÉV és ÉVES részekhez, amikor a dátum a hónap utolsó napján van (vagy annak közelében van). Ha a kapott hónapnak kevesebb napja van, mint az eredeti DATETIME & # 39s napja, akkor az eredménynap az új hónap utolsó napja.

Vissza adattípus

DATETIME_SUB

Leírás

Kivonja a rész int64_expression egységeit a DATETIME értékből.

A DATETIME_SUB a következő értékeket támogatja a részhez:

  • MIKROSZEKUNDUM
  • MILISZEKUNDUM
  • MÁSODIK
  • PERC
  • ÓRA
  • NAP
  • HÉT. 7 DAY s-nak felel meg.
  • HÓNAP
  • NEGYED
  • ÉV

Különleges kezelésre van szükség a HÓNAP, NEGYEDÉV és ÉVES részekhez, amikor a dátum a hónap utolsó napján van (vagy annak közelében van). Ha a kapott hónapnak kevesebb napja van, mint az eredeti DATETIME & # 39s napja, akkor az eredménynap az új hónap utolsó napja.

Vissza adattípus

DATETIME_DIFF

Leírás

Visszaadja a teljes megadott részintervallumok számát két DATETIME objektum (dátumidő_kifejezés_a - dátumidő_kifejezés_b) között. Ha az első DATETIME korábbi, mint a második, a kimenet negatív. Hibát dob, ha a számítás túlcsordítja az eredménytípust, például ha a két DATETIME objektum mikroszekundumos különbsége túlcsordulna egy INT64 értéken.

A DATETIME_DIFF a következő értékeket támogatja a részhez:

  • MIKROSZEKUNDUM
  • MILISZEKUNDUM
  • MÁSODIK
  • PERC
  • ÓRA
  • NAP
  • HÉT: Ez a dátumrész vasárnap kezdődik.
  • WEEK (& ltWEEKDAY & gt): Ez a dátumrész a WEEKDAY napon kezdődik. A WEEKDAY érvényes értékei: VASÁRNAP, HÉTFŐ, KEDD, SZERDA, CSÜTÖRTÖK, PÉNTEK és SZOMBAT.
  • ISOWEEK: ISO 8601-es hetes határokat használ. Az ISO hetek hétfőn kezdődnek.
  • HÓNAP
  • NEGYED
  • ÉV
  • ISOYEAR: Az ISO 8601 hetes számozási évhatárot használja. Az ISO évhatár az első hét hétfője, amelynek csütörtökje a megfelelő gregorián naptári évhez tartozik.

Vissza adattípus

A fenti példa a DATETIME_DIFF eredményét mutatja be két DATETIME s esetén, amelyek 24 órás különbséggel rendelkeznek. A DATETIME_DIFF a WEEK résszel 1-et ad vissza, mert a DATETIME_DIFF megszámolja a DATETIME s tartomány ezen részhatárainak számát. Minden HÉT vasárnap kezdődik, tehát egy részhatár van 2017-10-14 00:00:00 szombat és 2017-10-15 00:00:00 szombat között.

Az alábbi példa a DATETIME_DIFF eredményét mutatja be két dátumra, különböző években. A DATETIME_DIFF a YEAR dátumrésszel 3-at ad vissza, mert megszámolja a gregorián naptári év határainak számát a két DATETIME s között. A DATETIME_DIFF az ISOYEAR dátumrésszel 2-t ad vissza, mert a második DATETIME az ISO 2015-ös évhez tartozik. A 2015-ös naptári év első csütörtökje 2015-01-01 volt, tehát az ISO-2015-ös év 2014-12-29 előző hétfőn kezdődik. .

A következő példa a DATETIME_DIFF két nap egymás utáni eredményét mutatja. Az első dátum hétfőre, a második dátum vasárnapra esik. A DATETIME_DIFF a WEEK dátumrésszel 0-t ad vissza, mert ez az idő a vasárnap kezdődő heteket használja. A DATETIME_DIFF a HÉT (HÉTFŐ) dátumrésszel tér vissza. 1. A DATETIME_DIFF a dátumrésszel az ISOWEEK értéke 1, mert az ISO hetek hétfőn kezdődnek.

DATETIME_TRUNC

Leírás

Csonkol egy DATETIME objektumot az alkatrész részletességére.

A DATETIME_TRUNC a következő értékeket támogatja a részhez:

  • MIKROSZEKUNDUM
  • MILISZEKUNDUM
  • MÁSODIK
  • PERC
  • ÓRA
  • NAP
  • HÉT
  • HÉT (& ltWEEKDAY & gt): Csonkolja a datetime_expression értéket az előző heti határig, ahol a hetek WEEKDAY-n kezdődnek. A WEEKDAY érvényes értékei: VASÁRNAP, HÉTFŐ, KEDD, SZERDA, CSÜTÖRTÖK, PÉNTEK és SZOMBAT.
  • ISOWEEK: Csonkítja a datetime_expression értéket az előző ISO 8601 heti határértékig. Az ISOWEEK hétfőn kezdődik. Minden ISO-év első ISOWEEK-je a megfelelő gregorián naptári év első csütörtökjét tartalmazza. Az ennél korábbi dátum_kifejezés az előző hétfőre csökken.
  • HÓNAP
  • NEGYED
  • ÉV
  • ISOYEAR: Csonkítja a datetime_expression értéket az előző ISO 8601 heti számozási év határáig. Az ISO évhatár az első hét hétfője, amelynek csütörtökje a megfelelő gregorián naptári évhez tartozik.

Vissza adattípus

A következő példában az eredeti DATETIME vasárnapra esik. Mivel a rész HÉT (HÉTFŐ), a DATE_TRUNC visszaadja az előző hétfő DATETIME értékét.

A következő példában az eredeti datetime_expression a 2015-ös gregorián naptári évben szerepel. A DATETIME_TRUNC és az ISOYEAR dátumrész azonban az datetime_expression-t az ISO év elejére, nem pedig a gregorián naptári évre csonkolja. A 2015-ös naptári év első csütörtökje 2015-01-01 volt, tehát az ISO-2015-ös év az előző hétfőn kezdődik, 2014-12-29. Ezért a dátumidő_kifejezés 2015-06-15 00:00:00 előtti ISO évhatár 2014-12-29.

FORMAT_DATETIME

Leírás

A DATETIME objektumot a megadott format_láncnak megfelelően formázza. A funkció által támogatott formátumelemek listáját lásd: A DATETIME támogatott formátumelemei.

Vissza adattípus

UTOLSÓ NAP

Leírás

Visszaadja a dátumot tartalmazó datetime kifejezés utolsó napját. Ezt általában a hónap utolsó napjának visszatérésére használják.

Opcionálisan megadhatja azt a dátumrészt, amelyre az utolsó napot visszaküldi. Ha ezt a paramétert nem használják, akkor az alapértelmezett érték MONTH. A LAST_DAY a date_part következő értékeit támogatja:

  • ÉV
  • NEGYED
  • HÓNAP
  • HÉT. 7 DAY s-nak felel meg.
  • HÉT (& ltWEEKDAY & gt). A & ltWEEKDAY & gt a hét kezdő napját jelenti. Az érvényes értékek: VASÁRNAP, HÉTFŐ, KEDD, SZERDA, CSÜTÖRTÖK, PÉNTEK és SZOMBAT.
  • ISOWEEK. ISO 8601-es hetes határokat használ. Az ISO hetek hétfőn kezdődnek.
  • ISOYEAR. Az ISO 8601 hetes számozási évhatárot használja. Az ISO évhatár az első hét hétfője, amelynek csütörtökje a megfelelő gregorián naptári évhez tartozik.

Vissza adattípus

Mindkettő visszatér a hónap utolsó napjára:

Ez az év utolsó napját adja vissza:

Ez egy hét vasárnap kezdődő hétének utolsó napját adja vissza:

Ez a hét utolsó napját adja vissza hétfőn kezdődő héten:

PARSE_DATETIME

Leírás

A format_string azokat a formátum elemeket tartalmazza, amelyek meghatározzák a datetime_string formázását. A datetime_string minden elemének tartalmaznia kell egy megfelelő elemet a format_stringben. Az egyes elemek helyének a format_stringben meg kell egyeznie a datetime_string minden elemének helyével.

A formátum karakterlánc teljes mértékben támogatja a legtöbb formátum elemet, kivéve% Q,% a,% A,% g,% G,% j,% P,% u,% U,% V,% w és% W.

A PARSE_DATETIME a karakterláncot a következő szabályok szerint elemzi:

  • Meg nem határozott mezők. Minden meg nem határozott mezőt inicializálunk 1970-01-01 00: 00: 00.0-tól. Például, ha az év nincs megadva, akkor az alapértelmezett értéke 1970.
  • Kis- és nagybetűk nélküli nevek. A nevek, például hétfő és február, nem érzékenyek a kis- és nagybetűkre.
  • Fehér űr. A formátum karakterláncában egy vagy több egymást követő szóköz megfelel a DATETIME karakterlánc nulla vagy több egymást követő szóközének. A DATETIME karaktersorozatban mindig megengedett a vezetõ és a követõ fehér szóköz, még akkor is, ha nem a formátumú karakterláncban van.
  • Formátum elsőbbség. Ha két vagy több formátumelem átfedésben van egymással, az utolsó általában felülír minden korábbi elemet, néhány kivételtől eltekintve. Például mind a% F, mind a% Y befolyásolja az évet, így a korábbi elem felülírja a későbbit. Lásd:% s,% C és% y leírása a DATETIME támogatott formátumú elemeiben.

Vissza adattípus

Az alábbi példák egy STRING szó szerinti szót elemzik DATETIME-ként.

Az alábbi példa egy STRING literált elemez, amely természetes dátumú dátumot tartalmaz, DATETIME-ként.

A DATETIME támogatott formátumelemei

Hacsak másként nem jelezzük, a DATETIME formátum-karakterláncokat használó függvények a következő elemeket támogatják:

Formátum elem Leírás Példa
% A A teljes hétköznapi név. szerda
% a A rövidített hétköznapi név. Házasodik
% B A teljes hónap neve. január
% b vagy% h A rövidített hónap neve. Jan
% C Az évszázad (egy év osztva 100-zal és egész számra csonkítva) tizedes számként (00-99). 20
% c A dátum és az idő ábrázolása. 20. január, szerda 21:47:00 2021
% D A dátum a következő formátumban:% m /% d /% y. 01/20/21
% d A hónap napja decimális számként (01-31). 20
% e A hónap napját tizedes szám (1-31) egy számjegy előtt szóköz írja be. 20
% F A dátum a következő formátumban:% Y-% m-% d. 2021-01-20
% G Az ISO 8601-es év, tizedes számként. Minden ISO év a Gergely-naptári év első csütörtökét megelőző hétfőn kezdődik. Ne feledje, hogy% G és% Y különböző eredményeket hozhat a gregorián évhatárok közelében, ahol a gregorián év és az ISO év eltérhet. 2021
% g Az évszázadok nélküli ISO 8601 év tizedes számként (00-99). Minden ISO év a Gergely-naptári év első csütörtökét megelőző hétfőn kezdődik. Ne feledje, hogy% g és% y különböző eredményeket hozhatnak a gregorián évhatárok közelében, ahol a gregorián év és az ISO év eltérhet. 21
% H Az óra (24 órás óra) tizedes számként (00–23). 21
%ÉN Az óra (12 órás óra) tizedes számként (01-12). 09
% j Az év napja decimális számként (001–366). 020
% k Az óra (24 órás óra), mint tizedes szám (0–23) egy számjegy, szóköz elé kerül. 21
% l Az órát (12 órás óra) tizedes szám (1-12) egy számjegyként szóköz előzi meg. 9
% M A perc decimális számként (00-59).
% m A hónap tizedes számként (01-12). 01
% n Új vonalas karakter.
% P Vagy am vagy pm. délután
% p Vagy AM vagy PM. DÉLUTÁN
% Q A negyed decimális számként (1–4). 1
% R Az idő% H:% M formátumban. 21:47
% r A 12 órás óra AM / PM jelöléssel. 09:47:00 PM
% S A második decimális számként (00-60). 00
% s A másodpercek száma 1970-01-01 00:00:00 óta. Mindig felülbírálja az összes többi formátumelemet, függetlenül attól, hogy% s hol jelenik meg a karakterláncban. Ha több% s elem jelenik meg, akkor az utolsó élvez elsőbbséget. 1611179220
% T Az idő a következő formátumban:% H:% M:% S. 21:47:00
% t Tabulátor karakter.
% U Az év hetes száma (vasárnap, mint a hét első napja) tizedes számként (00–53). 03
% u A hétköznap (hétfő, mint a hét első napja) decimális számként (1-7). 3
% V Az év ISO 8601 heti száma (hétfő, mint a hét első napja) tizedes számként (01–53). Ha a január 1-jét tartalmazó hétnek legalább négy napja van az új évben, akkor ez az 1. hét, különben az előző év 53. hete, a következő hét pedig az 1. hét. 03
% W Az év hetes száma (hétfő, mint a hét első napja) tizedes számként (00–53). 03
% w A hétköznap (vasárnap, mint a hét első napja) tizedes számként (0-6). 3
%X Az idő ábrázolása ÓÓ: HH: SS formátumban. 21:47:00
%x A dátum megjelenítése HH / NN / ÉÉ formátumban. 01/20/21
% Y Az évszázad tizedes számként. 2021
% y Az évszázad nélküli év decimális számként (00-99), opcionálisan vezető nullával. Keverhető% C-val. Ha a% C nincs megadva, a 00-68 év 2000-es, míg a 69-99 év 1900-as. 21
%% Egyetlen% karakter. %
% E # S Másodpercek # számjegyű pontossággal. 00.000
% E * S Másodpercek teljes töredékpontossággal (szó szerinti *). 00
% E4Y Négy karakteres év (0001. 9999). Ne feledje, hogy% Y annyi karaktert állít elő, amennyi az év teljes megjelenítéséhez szükséges. 2021

Hacsak másként nem jelezzük, ennek az oldalnak a tartalma a Creative Commons Attribution 4.0 licenc alatt, a kódminták pedig az Apache 2.0 licenc alatt vannak licencelve. Részleteket a Google Developers webhelyszabályzatában talál. A Java az Oracle és / vagy leányvállalatainak bejegyzett védjegye.


Az X ++ és a .NET közötti dátum / idő értékek karakterlánc-reprezentációinak átadására használható módszerek a következők:

System.DateTime.GetDateTimeFormats (Adjon meg egy System.Char-t.)

Sem a System.Convert :: ToString, sem a System.DateTime.ToString nem ad ki egy olyan formátumot, amelyet a DateTimeUtil :: Parse beírhat.

ISO karakterlánc formátum a dátumhoz / időhöz

A DateTimeUtil :: toStr és System.DateTime.GetDateTimeFormats kimeneti formátuma éééé-hh-ddThh: mm: ss 24 órás formátumban (nincs lemaradva AM vagy PM), vezető nullákkal. Például 2007. július 20-án 13: 45-kor az eredmény a következő lesz: 2007-07-20T13: 45: 00. Ez a karakterlánc formátum a Nemzetközi Szabványügyi Szervezet (ISO) szabványa.

Ezt az ISO karakterlánc formátumot a DateTimeUtil :: parse és a System.DateTime :: Parse fájlba kell beírni. a karakterlánc dátum / idő típusgá alakítására.

Minta a dátum / idő és a karakterlánc közötti konvertálásról

A következő X ++ kódminta megmutatja, hogyan lehet kompatibilis karakterláncokat átvinni a .NET és az X ++ között, és konvertálni dátum / idő változókká.


A "minőségbiztosítási tippekről"

A W3C minőségbiztosítási tippek rövid dokumentumok, amelyek a webfejlesztők vagy tervezők számára hasznos ismereteket ismertetnek, amelyeket a W3C Minőségbiztosítási Érdekcsoport szervez és készít.

Noha a csoport résztvevői gondosan átnézik a tippeket, nem szabad őket csak informatív bölcsességként tekinteni, és különösen nem normatív W3C műszaki előírások.

Tudjon meg többet a tippekről, hogyan küldje el saját bölcsességgyöngyét, és az összes többi minőségbiztosítási tippet megtalálja a tippek indexében.

Copyright & copy 1994-2006 W3C & reg (MIT, ERCIM, Keio), Minden jog fenntartva. A W3C felelősségi, védjegy-, dokumentumhasználati és szoftverlicencelési szabályai érvényesek. Ezzel a weboldallal végzett interakciói összhangban vannak a nyilvános és a tagok adatvédelmi nyilatkozatainkkal.


Nem kaphat üres karakterláncot, mert a DATE értéktípust adja vissza az ISNULL könyvtárból.

Ugyanazt a típust adja vissza, mint a check_expression. Ha szó szerinti NULL értéket ad meg check_expressionként, akkor a csere_érték adattípusát adja vissza. Ha egy szó szerinti NULL értéket ad meg check_expressionként, és nem ad meg csereértéket, akkor visszaad egy int értéket.

Ha azt ellenőrzi, hogy az érték NULL-e vagy sem, akkor nincs szükség dátumra konvertálásra, hacsak nem egy dátumértéket kívánt visszaadni (amire nem tűnik).

A NULL dátum NULL (nincs érték). Egy üres karakterlánc viszont 0-ra változik, ami az SQL Serverben implicit módon egész szám, amely az 1900-01-01 óta eltelt napok számát jelenti.


Impala dátum és idő függvények

A dátum és idő adatok mögöttes Impala adattípusai: TIMESTAMP és DATE.

  • A beállítás alapértelmezés szerint ki van kapcsolva, ami azt jelenti, hogy az olyan funkciók, mint a FROM_UNIXTIME () és a UNIX_TIMESTAMP (), úgy gondolják, hogy a bemeneti értékek mindig az UTC időzónát képviselik.
  • Ez a beállítás akkor is érvényes, ha BIGINT értéket ad át () a TIMESTAMP-nak, vagy egy TIMESTAMP értéket a BIGINT-nek. Ha ez a beállítás engedélyezve van, ezek a funkciók és műveletek a helyi időzónát reprezentáló értékekre és azokról konvertálódnak. Lásd a TIMESTAMP adattípus leírást arról, hogy az Impala hogyan kezeli az időzóna szempontjait a TIMESTAMP adattípusnál.

Funkció hivatkozás:

Az Impala a következő dátum- és időfunkciókat támogatja:

  • ADD_MONTHS
  • HOZZÁADÁS
  • MOSTANI DÁTUM
  • CURRENT_TIMESTAMP
  • DATE_ADD
  • DATE_PART
  • DATE_SUB
  • DATE_TRUNC
  • DATEDIFF
  • NAP
  • DAYNAME
  • A HÉT NAPJA
  • DAYOFYEAR
  • DAYS_ADD
  • DAYS_SUB
  • KIVONAT
  • FROM_TIMESTAMP
  • FROM_UNIXTIME
  • FROM_UTC_TIMESTAMP
  • ÓRA
  • HOURS_ADD
  • HOURS_SUB
  • INT_MONTHS_BETWEEN
  • MICROSECONDS_ADD
  • MICROSECONDS_SUB
  • MILISZEKUNDUM
  • MILLISECONDS_ADD
  • MILLISECONDS_SUB
  • PERC
  • MINUTES_ADD
  • MINUTES_SUB
  • HÓNAP
  • MONTHNAME
  • MONTHS_ADD
  • MONTHS_BETWEEN
  • MONTHS_SUB
  • NANOSECONDS_ADD
  • NANOSECONDS_SUB
  • KÖVETKEZŐ NAP
  • MOST
  • NEGYED
  • MÁSODIK
  • SECONDS_ADD
  • SECONDS_SUB
  • SUBDATE
  • NAPSZAK
  • TIMESTAMP_CMP
  • RANDIZNI
  • TO_TIMESTAMP
  • TO_UTC_TIMESTAMP
  • TRUNC
  • UNIX_TIMESTAMP
  • UTC_TIMESTAMP
  • WEEKOFYEAR
  • WEEKS_ADD
  • WEEKS_SUB
  • ÉV
  • YEARS_ADD
  • YEARS_SUB

Használati megjegyzések:

Ugyanaz, mint a MONTHS_ADD (). Impala 1.4 és újabb verziókban érhető el. A kompatibilitás a kód szállítói kiterjesztésekkel történő hordozásakor.

ADDDATE (TIMESTAMP / DATE dátum, INT / BIGINT nap) Célja: Napokat ad hozzá a dátumhoz, és visszaadja az új dátumértéket.

A napok értéke negatív lehet, ami ugyanazt az eredményt adja, mint a SUBDATE () függvény.

A CURRENT_DATE () függvényre történő hivatkozásokat a lekérdezés elején értékeljük. Ugyanazon lekérdezésen belül a CURRENT_DATE () összes hívása ugyanazt az értéket adja vissza, és az érték nem attól függ, hogy a lekérdezés mennyi ideig tart.

Vissza típus: DÁTUM

CURRENT_TIMESTAMP () Célja: Álnév a NOW () függvényhez.

Vissza típus: IDŐBÉLYEG

DATE_ADD (TIMESTAMP / DATE dátum, INT / BIGINT nap), DATE_ADD (TIMESTAMP / DATE dátum, intervallum_kifejezés) Célja: Megad egy megadott számú napot a dátum argumentumhoz. Az INTERVAL kifejezés második argumentumaként kiszámíthat egy delta értéket más egységek, például hetek, évek, órák, másodpercek stb. Felhasználásával. A részletekért lásd a TIMESTAMP adattípust.

A következő példák az INTERVAL kifejezés rövidítéseit mutatják be, ahelyett, hogy pontosan megadnák a napok számát. Az INTERVAL jelölés lehetővé teszi, hogy egyetlen napnál kisebb egységekkel dolgozzon.

Mint minden dátum / idő függvény, amely hónapokkal foglalkozik, a date_add () is kezeli a nem létező dátumokat egy hónap végén, úgy, hogy a dátumot a hónap utolsó napjára állítja. A következő példa bemutatja, hogy a nem létező dátum április 31-e hogyan normalizálódik április 30-ig:

  • 0, ha a dátumok megegyeznek.
  • 1, ha dátum1 & gt dátum2.
  • -1, ha dátum1 & lt dátum2.
  • NULL, ha a date1 vagy a date2 értéke NULL.

Vissza típus: INT

DATE_PART (STRING rész, TIMESTAMP / DATE dátum) Célja: Hasonló az EXTRACT () -hoz, az argumentum sorrendje megfordult. Ugyanazt a dátum- és időegységet támogatja, mint az EXTRACT (). A szállítói kiterjesztéseket tartalmazó SQL-kóddal való kompatibilitás érdekében.

Vissza típus: BIGINT

DATE_SUB (TIMESTAMP kezdési dátum, INT nap), DATE_SUB (TIMESTAMP kezdési dátum, intervallum-kifejezés) Célja: Meghatározott számú napot von le a TIMESTAMP értékből. Az INTERVAL kifejezés második argumentumaként kiszámíthat egy delta értéket más egységek, például hetek, évek, órák, másodpercek stb. Felhasználásával. A részletekért lásd a TIMESTAMP adattípust.

A következő példa a legegyszerűbb felhasználást mutatja, amikor egy meghatározott számú napot kivonunk a TIMESTAMP értékből:

A következő példák az INTERVAL kifejezés rövidítéseit mutatják be, ahelyett, hogy pontosan megadnák a napok számát. Az INTERVAL jelölés lehetővé teszi, hogy egyetlen napnál kisebb egységekkel dolgozzon.

Mint minden dátum / idő függvény, amely hónapokkal foglalkozik, a date_add () is kezeli a nem létező dátumokat egy hónap végén, úgy, hogy a dátumot a hónap utolsó napjára állítja. A következő példa bemutatja, hogy a nem létező dátum április 31-e hogyan normalizálódik április 30-ig:

DATE_TRUNC (STRING egység, TIMESTAMP / DATE ts) Célja: Visszaadja a csonkolt ts értéket a megadott egységre.

Érv: Az egység argumentum nem különbözteti meg a kis- és nagybetűket. Ez az argumentumlánc a következők egyike lehet:

Mértékegység TIMESTAMP támogatott DATE-ig támogatott
„MIKroszekundumok” Igen Nem
„MILLISECONDS” Igen Nem
'MÁSODIK' Igen Nem
'PERC' Igen Nem
'ÓRA' Igen Nem
'NAP' Igen Igen
'HÉT' Igen Igen
'HÓNAP' Igen Igen
'ÉV' Igen Igen
'ÉVTIZED' Igen Igen
'SZÁZAD' Igen Igen
'ÉVEZRED' Igen Igen

Hozzáadva: Impala 2.11.0

Használati megjegyzések:

Bár ez a függvény hasonló a TRUNC () meghívásához TIMESTAMP vagy DATE argumentummal, az argumentumok sorrendje és a felismert egységek különböznek a TRUNC () és a DATE_TRUNC () között. Ezért ezek a funkciók nem helyettesíthetők.

Ezt a függvényt általában a GROUP BY lekérdezésekben használják az ugyanabban az órában, napban, héten, hónapban, negyedévben stb. Ezt a funkciót INSERT-ben is használhatja. A SELECT egy particionált táblába osztja a TIMESTAMP vagy DATE értékeket a megfelelő partícióra.

  • TIMESTAMP, ha a második argumentum, ts, TIMESTAMP.
  • DATE, ha a második argumentum, ts, DATE.

A DATE_TRUNC ('HOUR', NOW ()) 2017-12-05 13:00:00 órával tér vissza.

A DATE_TRUNC ('MILLENNIUM', DATE'2019-08-02 ') eredménye 2001-01-01.

DATEDIFF (TIMESTAMP / DATE végdátum, TIMESTAMP / DATE kezdési dátum) Célja: Visszaadja a kezdetek dátumától a vég dátumig terjedő napok számát.

Ha enddate & gt startdate, a visszatérési érték pozitív.

Ha enddate & lt startdate, a visszatérési érték negatív.

Ha enddate = startdate, akkor a visszatérési érték nulla.

Vissza típus: INT

Használati megjegyzések:

Az enddate és startdate értékek időtartama figyelmen kívül marad. Például az egyik nap 23:59 és a következő nap 12:01 a DATEDIFF () -1 értéket képviseli, mivel a dátum / idő értékek különböző napokat képviselnek, annak ellenére, hogy a TIMESTAMP értékek csak 2 perccel térnek el.

DAY (TIMESTAMP / DATE dátum), DAYOFMONTH (TIMESTAMP / DATE dátum) Célja: Visszaadja a dátum argumentum dátumértékét. Az érték a hónap napját jelöli, ezért az 1-31 vagy ennél kisebb tartományban van, 31 hónap nélküli hónapokig.

NULL értéket ad vissza nem létező dátumokra, pl. Február 30., vagy rosszul formázott dátumhúrok, pl. „1999-02-013”.

Vissza típus: INT

DAYNAME (TIMESTAMP / DATE dátum) Célja: Visszaadja a dátum argumentum napnevét. A visszatérési értékek tartománya „vasárnap” és „szombat”. Jelentést generáló lekérdezésekben használják, a DAYOFWEEK () meghívásának alternatívájaként, és ezt a numerikus visszatérési értéket karaktersorozatba alakítja egy CASE kifejezés segítségével.

Vissza típus: HÚR

DAYOFWEEK (TIMESTAMP / DATE dátum) Célja: Visszaadja a dátum argumentum nap mezőjét, amely a hét napjának felel meg. A visszatérési értékek tartománya 1 (vasárnap) - 7 (szombat).

Vissza típus: INT

DAYOFYEAR (TIMESTAMP / DATE dátum) Célja: Visszaadja a dátum argumentum dátummezőjét, amely az év napjának felel meg. A megtérülési értékek tartománya 1 (január 1.) - 366 (szökőév december 31.).

Vissza típus: INT

DAYS_ADD (TIMESTAMP / DATE dátum, INT / BIGINT nap) Célja: Visszaadja az értéket a dátumhoz hozzáadott napok számával.

Érv: Az egység argumentum értéke nem különbözteti meg a kis- és nagybetűket. Az egység karaktersorozata a következők egyike lehet:

Mértékegység A TIMESTAMP ts támogatott Támogatott: DATE ts
'KORSZAK' Igen Nem
'MILISZEKUNDUM' Igen Nem
'MÁSODIK' Igen Nem
'PERC' Igen Nem
'ÓRA' Igen Nem
'NAP' Igen Igen
'HÓNAP' Igen Igen
'NEGYED' Igen Igen
'ÉV' Igen Igen

Használati megjegyzések:

Általában a GROUP BY lekérdezésekben használják az eredmények órára, napra, hónapra stb. Rendezésére. Ezt a funkciót INSERT-ben is használhatja. SELECT utasítás, amelyet be kell illeszteni egy particionált táblába a TIMESTAMP értékek felosztására az egyes részekre, ha a particionált táblának külön partíciós kulcs oszlopai vannak, amelyek az évet, a hónapot, a napot és így tovább. Ha bonyolultabb időegységekkel kell felosztani, például hetekre vagy negyedekre, használja inkább a TRUNC () függvényt.

Vissza típus: BIGINT

Az EXTRACT (DAY FROM DATE'2019-08-17 ') értéke 17.

Ha az egység argumentumhoz 'MILLISECOND' értéket ad meg, a függvény a másodperc és az ezredmásodperces komponenseket adja vissza.

KIVONAT (CAST ('2006-05-12 18: 27: 28.123456789' AS TIMESTAMP), 'MILLISECOND') 28123-at ad vissza.

FROM_TIMESTAMP (TIMESTAMP dátumidő, STRING minta), FROM_TIMESTAMP (STRING dátumidő, STRING minta) Célja: A TIMESTAMP értéket egy azonos értéket képviselő karakterlánccá alakítja.

Vissza típus: HÚR

Használati megjegyzések:

A FROM_TIMESTAMP () függvény rugalmas módot kínál arra, hogy a TIMESTAMP értékeket tetszőleges karakterlánc formátumokká konvertálja jelentési célokra.

Mivel az Impala implicit módon konvertálja a karakterlánc értékeit TIMESTAMP-ba, átadhatja a karakterláncként ábrázolt dátum / idő értékeket (a szokásos éééé-hh-nn ÓÓ: mm: ss.SSS formátumban) ennek a függvénynek. Az eredmény egy sztring, amely különböző elválasztó karaktereket, mezők sorrendjét, pontosított hónapneveket vagy a dátum / idő karakterlánc ábrázolás egyéb változatát használja.

A mintasztring megengedett tokenjei megegyeznek a FROM_UNIXTIME () függvénnyel.

FROM_UNIXTIME (BIGINT unixtime [, STRING minta]) Célja: Átalakítja a másodpercek számát a Unix korszakról a megadott időre karakterlánccá a helyi időzónában.

Vissza típus: HÚR

A mintasztring támogatja a Java SimpleDateFormat következő részhalmazát.

Minta Leírás
y Év
M Hónap
d Nap
H Óra
m Perc
s Második
S Törtrészes
+/- óó: mm Időzóna eltolás
+/- hhmm Időzóna eltolás
+/- ó Időzóna eltolás

A mintasztringre a következő szabályok vonatkoznak:

  • A minta karakterlánc megkülönbözteti a kis- és nagybetűket.
  • 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. Például:
    • 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.