SQL – funkcie dátumu. Funkcie Transact-SQL Sql funkcie pre prácu s dátumami

Získanie aktuálneho dátumu a času

Ak chcete získať aktuálny dátum (bez času) vo formáte RRRR-MM-DD, môžete použiť funkcie:

  • CURDATE()
  • AKTUÁLNY DÁTUM()

Ak chcete získať aktuálny čas (bez dátumu) vo formáte HH:MM:SS, môžete použiť funkcie:

  • CURTIME()
  • AKTUÁLNY ČAS()

Ak chcete získať aktuálny dátum a čas vo formáte RRRR-MM-DD HH:MM:SS, môžete použiť ktorúkoľvek z nasledujúcich funkcií:

  • TERAZ()
  • SYSDATE()
  • CURRENT_TIMESTAMP

Príklad 1

SELECT CURDATE(); alebo SELECT CURRENT_DATE();

Výsledok: 28.08.2016

SELECT CURTIME(); alebo SELECT CURENT_TIME();

Výsledok: 19:29:54

VYBERTE TERAZ (); alebo SELECT SYSDATE(); alebo SELECT CURRENT_TIMESTAMP;

Výsledok: 28.08.2016 19:29:54

Sčítanie a odčítanie časového intervalu

S dátumami a časmi musíte často vykonávať aritmetické operácie: pripočítať alebo odčítať určitý časový interval k danému dátumu. Pridanie časového intervalu je možné vykonať tromi spôsobmi:

  • Funkcia DATE_ADD(pôvodný_dátum, typ výrazu INTERVAL);
  • Funkcia ADDDATE(pôvodný_dátum, typ výrazu INTERVAL);
  • Výraz: source_date + INTERVAL typ výrazu.

Odčítanie časového intervalu je možné vykonať aj tromi spôsobmi:

  • Funkcia DATE_SUB(zdrojový_dátum, typ výrazu INTERVAL);
  • Funkcia SUBDATE(zdrojový_dátum, typ výrazu INTERVAL);
  • Výraz: source_date - INTERVAL typ výrazu.

Source_date je dátum, ku ktorému sa pripočítava alebo odčítava určitý časový interval. Výraz– ide o samotný sčítaný alebo odčítaný časový interval zadaný v textovom formáte. Typ– argument označujúci typ intervalu, ktorý sa má pridať. Táto možnosť určuje, ako správne interpretovať výraz. Napríklad výraz „3:24“ možno interpretovať ako 3 hodiny 24 minút alebo 3 minúty 24 sekúnd. Ak je zadaný typ „MINUTE_SECOND“, interpretácia bude jednoznačná. Vzťah medzi argumentmi výrazu a typu je uvedený v tabuľke:

Príklad 2

Nasledujúce tri príkazy vykonajú rovnakú operáciu. K danému času pridajú sekundu.

SELECT "2016-09-10 23:59:59" + interval 1 SEKUNDA;

SELECT ADDDATE("2016-09-10 23:59:59", Interval 1 SECOND);

SELECT DATE_ADD("2016-09-10 23:59:59", Interval 1 SECOND);

Výsledok všetkých troch tímov je rovnaký: 2016-09-11 00:00:00.

Príklad 3

Nasledujúce tri príkazy vypočítajú dátum, ktorý je presne jeden a pol roka pred daným dátumom:

SELECT DATE_SUB("2016-09-10 23:59:59", Interval "1-6" YEAR_MONTH);

SELECT SUBDATE("2016-09-10 23:59:59", Interval "1-6" YEAR_MONTH);

SELECT "2016-09-10 23:59:59" - Interval "1-6" YEAR_MONTH;

Výsledok všetkých troch tímov je rovnaký: 2015-03-10 23:59:59.

Konverzné funkcie na iné jednotky

Niekedy je vhodné pracovať s dátumom reprezentovaným ako počet dní, ktoré uplynuli od roku 0. Ak chcete previesť dátum do tohto formátu a späť v MySQL, existujú dve funkcie:

  • Dnešný dátum) – vráti číslo dňa zodpovedajúce argumentu dátumu.
  • FROM_DAYS(day_number)– vráti dátum podľa čísla dňa.

Od autora: Dnes si povieme, ako fungujú dátumové funkcie v SQL. Nasledujúca tabuľka obsahuje zoznam všetkých dôležitých funkcií dátumu a času, ktoré sú k dispozícii. Existujú aj iné podporované rôznymi DBMS. Tento zoznam predstavuje funkcie dostupné v MySQL DBMS.

PRIDAŤ (). Pridáva dátumy

PRIDAŤ ČAS (). Pridáva čas

CONVERT_TZ(). Konvertuje z jedného časového pásma do druhého

CURDATE(). Vráti aktuálny dátum

CURRENT_DATE(), CURRENT_DATE. Synonymá pre CURDATE()

CURRENT_TIME(), CURRENT_TIME. Synonymá pre CURTIME()

CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP. Synonymá pre NOW()

CURTIME(). Vráti aktuálny čas

DATE_ADD(). Pridáva dva dátumy

FORMÁT DÁTUMU(). Nastaví zadaný formát dátumu

DATE_SUB(). Odpočíta jeden dátum od druhého

DÁTUM(). Extrahuje časť dátumu z výrazu reprezentujúceho dátum alebo čas a dátum

DATEDIFF(). Odpočíta jeden dátum od druhého

DAY(). Synonymum pre DAYOFMONTH()

DAYNAME(). Vráti deň v týždni

DAYOFMONT(). Vráti deň v mesiaci (1-31)

DEŇ V TÝŽDNI(). Vráti index dňa v týždni argumentu

DAYOFYEAR(). Vráti číslo dňa v roku (1-366)

EXTRAKT. Načíta časť dátumu

FROM_DAYS(). Skonvertuje číslo dňa na dátum

FROM_UNIXTIME(). Formátuje dátum ako časovú pečiatku systému UNIX

HODINA(). Načíta hodinu

POSLEDNÝ DEŇ. Vráti posledný deň v mesiaci pre argument

LOCALTIME(), LOCALTIME. Synonymum pre NOW()

LOCALTIMESTAMP, LOCALTIMESTAMP(). Synonymum pre NOW()

MAKEDATE(). Vytvorí dátum z roku a dňa v roku

UROBIŤ SI ČAS. UROBIŤ SI ČAS(). MIKROSECOND(). Vráti mikrosekundy z argumentu

MINÚTA(). Vráti minúty od argumentu

MESIAC (). Vrátenie mesiaca z dátumu

MONTHNAME(). Vráti názov mesiaca

TERAZ (). Vráti aktuálny dátum a čas

PERIOD_ADD(). Pridá obdobie k roku-mesiacemu

PERIOD_DIFF(). Vráti počet mesiacov medzi obdobiami

ŠTVRŤ(). Vráti štvrtinu z argumentu

SEC_TO_TIME(). Skonvertuje sekundy do formátu „HH:MM:SS“.

DRUHÝ(). Vráti sekundy (0 – 59)

STR_TO_DATE(). Skonvertuje reťazec na dátum

SUBDATE(). Pri volaní s tromi argumentmi je to synonymum DATE_SUB().

SUBTIME(). Odpočítava čas

SYSDATE(). Vráti čas vykonania funkcie

FORMÁT ČASU(). Nastaví formát času

TIME_TO_SEC(). Vráti argument skonvertovaný na sekundy

ČAS (). Extrahuje časovú časť odovzdaného výrazu

TimeDiff(). Odpočítava čas

ČASOVÁ ZNAČKA(). S jedným argumentom táto funkcia vráti výraz dátumu alebo dátumu a času. S dvoma argumentmi - pridáva tieto dva argumenty

TIMESTAMPADD(). Pridá interval k výrazu dátumu a času

TIMESTAMPDIFF(). Odčíta interval od výrazu dátumu a času

TO_DAYS(). Vráti argument dátumu skonvertovaný na dni

UNIX_TIMESTAMP(). Vráti časovú pečiatku systému UNIX

UTC_DATE(). Vráti aktuálny dátum UTC

UTC_TIME(). Vráti aktuálny čas UTC

UTC_TIMESTAMP(). Vráti aktuálny dátum a čas UTC

WEEK(). Vráti číslo týždňa

WEEKDAY(). Vráti index dňa v týždni

WEEKOFYEAR(). Vráti číslo kalendárneho týždňa (1-53)

ROK(). Vráti rok

YEARWEEK(). Vráti rok a týždeň

ADDDATE(dátum,INTERVAL expr.jednotka), ADDDATE(výraz,dni)

Pri volaní s druhým argumentom špecifikovaným ako INTERVAL je ADDDATE() synonymom pre DATE_ADD(). Súvisiaca funkcia SUBDATE() je synonymom pre DATE_SUB(). Informácie o argumente bloku INTERVAL nájdete v časti DATE_ADD().

Keď sa zavolá s druhým argumentom uvedeným v dňoch, MySQL to považuje za celý počet dní, ktoré sa majú pridať k výrazu.

ADDTIME(výraz1;výraz2)

ADDTIME() pridá expr2 k expr1 a vráti výsledok. Expr1 je výraz času alebo dátumu a času, zatiaľ čo výraz expr2 je výraz času.

CONVERT_TZ(dt;from_tz,to_tz)

Skonvertuje hodnotu dátumu a času dt z časového pásma určeného v from_tz do časového pásma určeného v do_tz a vráti výslednú hodnotu. Táto funkcia vráti hodnotu NULL, ak sú argumenty neplatné.

CURDATE()

Vráti aktuálny dátum ako hodnotu vo formáte „RRRR-MM-DD“ alebo RRRRMMDD v závislosti od toho, či sa táto funkcia používa v reťazcovom alebo číselnom kontexte.

CURRENT_DATE a CURRENT_DATE()

CURRENT_DATE a CURRENT_DATE() sú synonymá pre CURDATE()

CURTIME()

Vráti aktuálny čas ako hodnotu vo formáte "HH:MM:SS" alebo HHMMSS v závislosti od toho, či sa funkcia používa v reťazcovom alebo číselnom kontexte. Hodnota je vyjadrená pre aktuálne časové pásmo.

CURRENT_TIME a CURRENT_TIME()

CURRENT_TIME a CURRENT_TIME() sú synonymá pre CURTIME().

CURRENT_TIMESTAMP a CURRENT_TIMESTAMP()

CURRENT_TIMESTAMP a CURRENT_TIMESTAMP() sú synonymá pre NOW().

DATE (expr)

Načíta dátumovú časť výrazu dátum alebo dátum a čas.

DATEDIFF(výraz1;výraz2)

DATEDIFF() vráti výraz expr1.expr2 vyjadrený ako počet dní medzi dvoma dátumami. Výraz1 aj výraz2 sú výrazy dátumu alebo dátumu a času. Vo výpočtoch sa používajú iba časti dátumu.

DATE_ADD(dátum,INTERVAL výpovedná jednotka), DATE_SUB(dátum,INTERVAL výpovedná jednotka)

Tieto funkcie vykonávajú aritmetické operácie s dátumami. dátum je reprezentovaný ako DATETIME alebo DATE hodnota označujúca počiatočný dátum. výraz je výraz, ktorý určuje hodnotu intervalu, ktorá sa má pripočítať alebo odčítať od pôvodného dátumu. expr je reťazec; môže začínať "-" pre záporné intervaly.

jednotka je kľúčové slovo, ktoré určuje merné jednotky výrazu. Kľúčové slovo INTERVAL a zápis jednotiek nerozlišujú veľké a malé písmená. Nasledujúca tabuľka zobrazuje očakávanú formu argumentu expr pre každú hodnotu jednotky.

Hodnoty QUARTER a WEEK sú dostupné v MySQL od verzie 5.0.0.

DATE_FORMAT (dátum, formát)

Tento príkaz naformátuje hodnotu dátumu podľa zadaného formátovacieho reťazca. Vo formátovacom riadku možno použiť nasledujúce ukazovatele. Pred indikátormi formátu musí byť znak '%'.

%a. Skrátený názov dňa v týždni (Ne..So)

%b. Skrátený názov mesiaca (jan...december)

%S. Číselné označenie mesiaca (0…12)

%D. Deň v mesiaci s anglickou príponou (0, 1, 2, 3,.)

%d. Číselné označenie dňa v mesiaci (00..31)

%e. Číselné označenie dňa v mesiaci (00..31)

%f. Mikrosekundy (000000..999999)

%H. Hodina (00..23)

%h. Hodina (01..12)

%I. Hodina (01..12)

%i. Číselné označenie minút (00..59)

%J. Deň v roku (001..366)

%k. Hodina (0..23)

%l. Hodina (1..12)

%M. Názov mesiaca (január..december)

% m. Číselné označenie mesiaca (00..12)

%R. Predpoludnie alebo popoludnie

%r. Čas, 12-hodinový formát (hh:mm:ss nasledovaný AM alebo PM)

%S. Sekundy (00..59)

%s. Sekundy (00..59)

%T. Čas, 24-hodinový formát (hh:mm:ss)

%U. Týždeň (00..53), kde nedeľa je prvým dňom v týždni

%u. Týždeň (00..53), kde pondelok je prvý deň v týždni

%V. týždeň (01..53), kde nedeľa je prvým dňom v týždni; používa sa s %X

%v. týždeň (01..53), kde pondelok je prvý deň v týždni; používa sa s %x

% W. Názov dňa v týždni (nedeľa..sobota)

% hm. Deň v týždni (0=nedeľa..6=sobota)

%X. Rok pre týždeň, kde prvým dňom v týždni je nedeľa, štvormiestne číslo; používa sa s %V

%X. Rok pre týždeň, kde je prvým dňom v týždni pondelok, štvormiestne číslo; používa sa s %V

%Y. Rok, dátum, štyri číslice

%y. Číselné označenie roku (dve číslice)

%%. Doslova symbol %

%X. x, pre všetky.x, ktoré nie sú uvedené vyššie

DATE_SUB(dátum,jednotka EXP INTERVAL)

Podobne ako pri funkcii DATE_ADD().

DAY(dátum)

DAY() je synonymom pre funkciu DAYOFMONTH().

DAYNAME(dátum)

Vráti deň v týždni pre zadaný dátum.

DAYOFMONTH(dátum)

Vráti deň v mesiaci pre zadaný dátum v rozsahu 0 až 31.

DAYOFWEEK(dátum)

Vráti index dňa v týždni (1 = nedeľa, 2 = pondelok, ., 7 = sobota). Tieto hodnoty indexu sa riadia štandardom ODBC.

DAYOFYEAR(dátum)

Vráti deň v roku pre zadaný dátum v rozsahu 1 až 366.

EXTRACT (jednotka OD dátumu)

Funkcia EXTRACT() používa rovnaké typy indikátorov jednotiek ako DATE_ADD() alebo DATE_SUB(), ale nevykonáva aritmetické operácie s dátumami, ale skôr extrahuje časť dátumu s indikátorom jednotiek.

FROM_DAYS (N)

Hodnota DATE sa vráti s prihliadnutím na počet dní N.

Poznámka. Pre staré dátumy používajte FROM_DAYS() opatrne. Funkcia nie je určená na prácu s hodnotami dátumu pred zavedením gregoriánskeho kalendára (1582).

FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,formát)

Vráti reprezentáciu argumentu unix_timestamp ako hodnotu vo formáte "RRRR-MM-DD HH:MM:SS alebo RRRRMMDDHHMMSS" v závislosti od toho, či sa táto funkcia používa v reťazcovom alebo číselnom kontexte. Hodnota je vyjadrená v aktuálnom časovom pásme. Parameter unix_timestamp je interná hodnota časovej značky, ktorú generuje funkcia UNIX_TIMESTAMP().

Ak je zadaný formát, výsledok sa naformátuje podľa formátovacieho reťazca, ktorý sa používa rovnakým spôsobom, ako je popísané v časti DATE_FORMAT().

HOUR(čas)

Vráti hodiny zo zadaného času. Rozsah vrátenej hodnoty je od 0 do 23. Rozsah hodnôt TIME je však v skutočnosti oveľa väčší, takže HOUR môže vrátiť hodnoty väčšie ako 23.

LAST_DAY(dátum)

Prevezme hodnotu dátumu alebo dátumu a času a vráti hodnotu zodpovedajúcu poslednému dňu v mesiaci. Ak je argument neplatný, vráti hodnotu NULL.

LOCALTIME a LOCALTIME()

LOCALTIME a LOCALTIME() sú synonymá pre NOW().

LOCALTIMESTAMP a LOCALTIMESTAMP()

LOCALTIMESTAMP a LOCALTIMESTAMP() sú synonymá pre NOW().

MAKEDATE(rok,deňroka)

Vráti hodnoty pre dátum, zadaný rok a deň v roku. Hodnota dayofyear musí byť väčšia ako 0, inak bude výsledok NULL.

MAKETIME(hodina,minúta,sekunda)

Vráti hodnotu času vypočítanú z argumentov hodina, minúta a sekunda.

MICROSECOND(výraz)

Vráti mikrosekundy z výrazu času alebo výrazu datetime(expr) ako číslo v rozsahu 0 až 999999.

MINUTE(čas)

Vráti minúty pre zadaný čas v rozsahu 0 až 59.

MESIAC(dátum)

Vráti mesiac pre zadaný dátum v rozsahu 0 až 12.

MONTHNAME(dátum)

Vráti celý názov mesiaca pre zadaný dátum.

TERAZ()

Vráti aktuálny dátum a čas ako hodnotu vo formáte "RRRR-MM-DD HH:MM:SS" alebo RRRRMMDDHHMMSS v závislosti od toho, či sa funkcia používa v reťazcovom alebo číselnom kontexte. Táto hodnota je vyjadrená v aktuálnom časovom pásme.

PERIOD_ADD(P,N)

Pridá N mesiacov do obdobia P (vo formáte RRMM alebo RRRRMM). Vráti hodnotu vo formáte RRRRMM. Všimnite si, že argument obdobia P nie je hodnotou dátumu.

PERIOD_DIFF(P1;P2)

Vráti počet mesiacov medzi obdobiami P1 a P2. Obdobia P1 a P2 musia byť uvedené vo formáte RRMM alebo RRRRMM. Všimnite si, že argumenty obdobia P1 a P2 nie sú hodnoty dátumu.

ŠTVRŤ(dátum)

Vráti štvrť roka pre zadaný dátum v rozsahu 1 až 4.

Druhýkrát)

Vráti hodnotu sekúnd pre čas v rozsahu 0 až 59.

SEC_TO_TIME (sekundy)

Vráti argument sekúnd skonvertovaný na hodiny, minúty a sekundy vo formáte "HH:MM:SS" alebo HHMMSS v závislosti od toho, či sa funkcia používa v reťazcovom alebo číselnom kontexte.

STR_TO_DATE(str,formát)

Toto je opak funkcie DATE_FORMAT(). Akceptuje reťazec str a formát formátovacieho reťazca. Ak formátovací reťazec obsahuje dátum aj čas, funkcia STR_TO_DATE() vráti DATETIME. V opačnom prípade vráti DATE alebo TIME, ak reťazec obsahuje iba dátum alebo čas.

SUBDATE(dátum,INTERVAL výpovedná jednotka) a SUBDATE(výraz,dni)

Ak sa SUBDATE() volá s druhým argumentom špecifikovaným ako INTERVAL, funkcia je synonymom pre DATE_SUB(). Informácie o argumente INTERVAL nájdete v časti DATE_ADD().

SUBTIME(výraz1;výraz2)

Funkcia SUBTIME() vráti výraz expr1. expr2 je vyjadrený ako hodnota v rovnakom formáte ako expr1. Hodnota expr1 je výraz času alebo dátumu a času a hodnota výrazu expr2 je výraz času.

SYSDATE()

Vráti aktuálny dátum a čas ako hodnotu vo formáte "RRRR-MM-DD HH:MM:SS" alebo RRRRMMDDHHMMSS v závislosti od toho, či sa funkcia používa v reťazcovom alebo číselnom kontexte.

TIME (expr)

Extrahuje časovú časť výrazu expr a vráti ju ako reťazec.

TIMEDIFF(výraz1;výraz2)

TIMEDIFF() vráti výraz1. expr2 je vyjadrená ako časová hodnota. Hodnoty ​​výraz1 a výraz2 sú výrazy času alebo dátumu a času, ale obe musia byť rovnakého typu.

TIMESTAMP (expr), TIMESTAMP (expr1, expr2)

S jedným zadaným argumentom táto funkcia vráti výraz dátum alebo dátum a čas výraz ako hodnotu dátumu a času. Pomocou dvoch argumentov pridá časový výraz výraz2 k výrazu dátum alebo dátum a čas výraz výraz1 a vráti výsledok ako hodnotu dátumu a času.

TIMESTAMPADD(jednotka,interval, dátum a čas_výraz)

Táto funkcia pridáva výraz intervalu celého čísla k výrazu dátumu alebo času datetime_expr. Jednotky pre interval sú určené argumentom unit, ktorý môže nadobúdať jednu z nasledujúcich hodnôt:

Hodnotu jednotky možno zadať pomocou jedného z kľúčových slov, ako je uvedené vyššie, alebo pomocou predpony SQL_TSI_. Napríklad DAY a SQL_TSI_DAY sú platné hodnoty.

TIMESTAMPDIFF(jednotka, dátum a čas_výraz1, dátum a čas_výraz2)

Vráti celočíselný rozdiel medzi výrazmi dátumu alebo dátumu a času datetime_expr1 a datetime_expr2. Jednotky merania pre výsledok sú špecifikované argumentom unit. Platné hodnoty pre argument unit sú rovnaké ako hodnoty uvedené vo funkcii TIMESTAMPADD().

TIME_FORMAT(čas,formát)

Táto funkcia sa používa rovnakým spôsobom ako funkcia DATE_FORMAT(), ale formátovací reťazec môže obsahovať iba špecifikátory formátu pre hodiny, minúty a sekundy.

Ak časová hodnota obsahuje hodinovú časť, ktorá je väčšia ako 23, indikátory formátu hodín %H a %k dávajú hodnotu väčšiu ako normálny rozsah 0 až 23. Ostatné indikátory formátu hodín poskytujú hodnotu modulo 12 hodín.

TIME_TO_SEC(čas)

Vráti argument času skonvertovaný na sekundy.

Dnešný dátum)

Vráti číslo dňa (počet dní od roku 0) pre daný dátum dátumu.

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(dátum)

Ak je táto funkcia volaná bez argumentu, vráti časovú značku Unixu (sekundy od „1970-01-01 00:00:00“ UTC) ako kladné celé číslo. Ak sa zavolá UNIX_TIMESTAMP() s argumentom dátumu, vráti hodnotu argumentu vyjadrenú v sekundách od "1970-01-01 00:00:00" UTC. dátum môže byť reťazec DATE, reťazec DATETIME, TIMESTAMP alebo číslo vo formáte RRMMDD alebo RRRRMMDD.

UTC_DATE, UTC_DATE()

Vráti aktuálny dátum UTC ako hodnotu vo formáte „RRRR-MM-DD“ alebo RRRRMMDD v závislosti od toho, či sa táto funkcia používa v reťazcovom alebo číselnom kontexte.

UTC_TIME, UTC_TIME()

Vráti aktuálny čas UTC ako hodnotu vo formáte „HH:MM:SS“ alebo HHMMSS v závislosti od toho, či sa funkcia používa v reťazcovom alebo číselnom kontexte.

UTC_TIMESTAMP, UTC_TIMESTAMP()

Vráti aktuálny dátum a čas UTC ako hodnotu "RRRR-MM-DD HH:MM:SS" alebo vo formáte RRRRMMDDHHMMSS v závislosti od toho, či sa táto funkcia používa v reťazcovom alebo číselnom kontexte.

WEEK(dátum[,režim])

Táto funkcia vráti číslo týždňa pre daný dátum dátumu. Dvojargumentový formulár WEEK() vám umožňuje určiť, či sa týždeň začína v nedeľu alebo v pondelok a či má byť návratová hodnota v rozsahu 0 až 53 alebo 1 až 53. Ak argument mode vynecháte, hodnota používa sa systémová premenná default_week_format

WEEKDAY(dátum)

Vráti index dňa v týždni pre daný dátum dátumu (0 = pondelok, 1 = utorok, 6 = nedeľa).

WEEKOFYEAR(dátum)

Vráti kalendárny týždeň pre daný dátum dátumu ako číslo v rozsahu 1 až 53. WEEKOFYEAR() je funkcia kompatibility ekvivalentná k WEEK(dátum,3).

YEAR(dátum)

Vráti rok pre daný dátum v rozsahu od 1000 do 9999 alebo 0 pre dátum.nula.

YEARWEEK(dátum), YEARWEEK(dátum,režim)

Vráti rok a týždeň pre daný dátum dátumu. Argument mode funguje presne ako argument mode funkcie WEEK(). Výsledný rok sa môže líšiť od roku v argumente dátumu pre prvý a posledný týždeň v roku.

Poznámka. Číslo týždňa sa líši od toho, čo vráti WEEK() (0) pre voliteľné argumenty 0 alebo 1, pretože WEEK() vráti týždeň v kontexte daného roka.

Posledná aktualizácia: 29.07.2017

T-SQL poskytuje množstvo funkcií na prácu s dátumami a časmi:

    GETDATE: Vráti aktuálny miestny dátum a čas na základe systémových hodín ako objekt dátumu a času

    SELECT GETDATE() -- 2017-07-28 21:34:55.830

    GETUTCDATE: Vráti aktuálny miestny dátum a čas v greenwichskom strednom čase (UTC/GMT) ako objekt dátumu a času

    SELECT GETUTCDATE() -- 28.07.2017 18:34:55.830

    SYSDATETIME: Vráti aktuálny miestny dátum a čas na základe systémových hodín, ale líši sa od GETDATE v tom, že dátum a čas sa vráti ako objekt datetime2

    SELECT SYSDATETIME() -- 2017-07-28 21:02:22.7446744

    SYSUTCDATETIME: Vráti aktuálny miestny dátum a čas v greenwichskom strednom čase (UTC/GMT) ako objekt datetime2

    SELECT SYSUTCDATETIME() -- 2017-07-28 18:20:27.5202777

    SYSDATETIMEOFFSET: vráti objekt datetimeoffset(7), ktorý obsahuje dátum a čas vzhľadom na GMT

    SELECT SYSDATETIMEOFFSET() -- 2017-07-28 21:02:22.7446744 +03:00

    DAY: vracia deň dátumu, ktorý je odovzdaný ako parameter

    SELECT DAY(GETDATE()) – 28

    MONTH: vráti mesiac dátumu

    SELECT MONTH(GETDATE()) – 7

    YEAR : vráti rok z dátumu

    SELECT YEAR(GETDATE()) – 2017

    DATENAME: Vráti časť dátumu ako reťazec. Parameter výberu časti dátumu sa odovzdá ako prvý parameter a samotný dátum sa odovzdá ako druhý parameter:

    SELECT DATENAME(mesiac, GETDATE()) -- júl

    Na určenie časti dátumu môžete použiť nasledujúce parametre (ich skrátené verzie sú uvedené v zátvorkách):

    • rok (yy, yyyy) : rok

      štvrťrok (qq, q) : štvrťrok

      mesiac (mm, m) : mesiac

      dayofyear (dy, y) : deň v roku

      deň (dd, d) : deň v mesiaci

      týždeň (wk, ww): týždeň

      deň v týždni (dw): deň v týždni

      hodina (hh): hodina

      minúta (mi, n) : minúta

      sekunda (ss, s) : sekunda

      milisekunda (ms): milisekunda

      mikrosekunda (mcs): mikrosekunda

      nanosekunda (ns): nanosekunda

      tzoffset (tz) : posun v minútach vzhľadom na GMT (pre objekt datetimeoffset)

    DATEPART: Vráti časť dátumu ako číslo. Parameter výberu časti dátumu sa odovzdá ako prvý parameter (používajú sa rovnaké parametre ako pre DATENAME) a ​​ako druhý parameter sa odovzdá samotný dátum:

    SELECT DATEPART(mesiac, GETDATE()) -- 7

    DATEADD: Vráti dátum, ktorý je výsledkom pridania čísla ku konkrétnemu komponentu dátumu. Prvý parameter predstavuje komponent dátumu opísaný vyššie pre funkciu DATENAME. Druhým parametrom je množstvo, ktoré sa má pridať. Tretím parametrom je samotný dátum, ku ktorému je potrebné pridať:

    SELECT DATEADD(mesiac, 2; "2017-7-28") -- 2017-09-28 00:00:00.000 SELECT DATEADD(deň, 5; "2017-7-28") -- 2017-08-02 00 :00:00.000 SELECT DATEADD(deň, -5; "2017-7-28") -- 2017-07-23 00:00:00.000

    Ak pridané množstvo predstavuje záporné číslo, potom sa dátum skutočne zníži.

    DATEDIFF: Vráti rozdiel medzi dvoma dátumami. Prvým parametrom je dátumová zložka, ktorá udáva, v akých jednotkách sa má merať rozdiel. Druhým a tretím parametrom sú porovnávané dátumy:

    SELECT DATEDIFF(rok, "2017-7-28", "2018-9-28") -- rozdiel 1 rok SELECT DATEDIFF(mesiac, "2017-7-28", "2018-9-28") -- rozdiel 14 mesiacov SELECT DATEDIFF(deň, "2017-7-28", "2018-9-28") -- rozdiel 427 dní

    TODATETIMEOFFSET : Vráti hodnotu datetimeoffset, ktorá je výsledkom pridania časového posunu k inému objektu datetimeoffset

    SELECT TODATETIMEOFFSET("2017-7-28 01:10:22", "+03:00")

    SWITCHOFFSET: Vráti hodnotu datetimeoffset, ktorá je výsledkom pridania časového posunu k objektu datetime2

    SELECT SWITCHOFFSET(SYSDATETIMEOFFSET(), "+02:30")

    EOMONTH: Vráti dátum posledného dňa v mesiaci, ktorý sa používa v dátume odovzdanom ako parameter.

    SELECT EOMONTH("2017-02-05") -- 2017-02-28 SELECT EOMONTH("2017-02-05", 3) -- 2017-05-31

    Ako voliteľný druhý parameter môžete zadať počet mesiacov, ktoré je potrebné pridať k dátumu. Potom sa pre nový dátum vypočíta posledný deň v mesiaci.

    DATEFROMPARTS: podľa roku, mesiaca a dňa vytvorí dátum

    SELECT DATEFROMPARTS(2017, 7, 28) -- 2017-07-28

    ISDATE: Testuje, či je výraz dátumom. Ak áno, vráti 1, inak vráti 0.

    SELECT ISDATE("2017-07-28") -- 1 SELECT ISDATE("2017-28-07") -- 0 SELECT ISDATE("07-28-2017") -- 0 SELECT ISDATE("SQL") - - 0

Príkladom použitia funkcií je vytvorenie tabuľky objednávok, ktorá obsahuje dátum objednávky:

CREATE TABLE Objednávky (Id INT IDENTITY PRIMÁRNY KEY, ProductId INT NOT NULL, CustomerId INT NOT NULL, CreatedAt DATE NOT NULL DEFAULT GETDATE(), ProductCount INT DEFAULT 1, Price MONEY NOT NULL);

Výraz DEFAULT GETDATE() určuje, že ak sa pri pridávaní údajov nezadá žiadny dátum, automaticky sa vypočíta pomocou funkcie GETDATE().

Ďalší príklad – nájdime objednávky, ktoré boli uskutočnené pred 16 dňami:

SELECT * FROM Orders WHERE DATEDIFF(deň, CreatedAt, GETDATE()) = 16

Zdravím vás, milí čitatelia blogovej stránky. Databáza často potrebuje uchovávať rôzne údaje týkajúce sa dátumu a času. Môže to byť dátum pridania informácií, dátum registrácie používateľa, čas poslednej autorizácie a ďalšie údaje. IN jazyk SQL Existuje veľa funkcií súvisiacich s dátumom a časom, takže dnes sa na ne pozrieme.

Všetky funkcie uvedené nižšie pracujú s typmi údajov kalendára.

Získanie aktuálneho dátumu a času.

Získať aktuálny dátum a čas používa sa funkcia TERAZ().

VYBERTE TERAZ ()
Výsledok: 25.09.2015 14:42:53

Iba prijímať aktuálny dátum existuje funkcia CURDATE().

SELECT CURDATE()
Výsledok: 25.09.2015

A funkcia CURTIME(), ktorý sa vracia iba aktuálny čas:

SELECT CURTIME()
Výsledok: 14:42:53

Funkcie CURDATE() a NOW() sú užitočné na pridávanie záznamov do databázy, pre ktorú chcete uložiť dátum ich pridania. Napríklad pri pridávaní článku na webovú stránku by bolo dobré uložiť dátum jeho uverejnenia. Potom bude požiadavka na pridanie článku do databázy vyzerať takto:

INSERT INTO posts (id_post, text_post, date_publication) VALUES (1, "text clanku", NOW ());

Sčítanie a odčítanie dátumov a časov

Funkcia ADDDATE (dátum, hodnota INTERVAL) pridáva k dnešnému dňu dátum význam hodnotu a vráti výslednú hodnotu. Ako hodnotu možno použiť nasledujúce hodnoty:

  • SECOND - sekundy
  • MINUTE – minúty
  • HOUR - hodiny
  • DAY - dni
  • WEEK - týždne
  • MONTH - mesiace
  • ŠTVRŤ - bloky
  • ROK - roky

ako aj ich kombinácie:

  • MINUTE_SECOND – minúty a sekundy
  • HOUR_SECOND hodiny – minúty a sekundy
  • HOUR_MINUTE – hodiny a minúty
  • DAY_SECOND – dni, hodiny, minúty a sekundy
  • DAY_MINUTE – dni, hodiny a minúty
  • DAY_HOUR – dni a hodiny
  • YEAR_MONTH – roky a mesiace.

SELECT ADDDATE ("2015-09-28 10:30:20", INTERVAL 1 DEŇ)
Výsledok: 29.09.2015 10:30:20

SELECT ADDDATE ("2015-09-28 10:30:20", INTERVAL "3 1:20" DAY_MINUTE)
Výsledok: 2015-10-01 11:50:20

Funkcia SUBDATE (dátum, hodnota INTERVAL) vyrába odčítanie hodnoty od dátumu dátum. Príklad:

VYBERTE PODDÁTUM ("2015-09-28 10:30:20", INTERVAL 20 HODIN)
Výsledok: 27.09.2015 14:30:20

Funkcia PERIOD_ADD(bodka; n) dodáva do hodnotového obdobia n mesiacov. Hodnota obdobia musí byť vo formáte RRRRMM (napríklad september 2015 bude 201509). Príklad:

SELECT PERIOD_ADD (201509, 4)
Výsledok: 201601

Funkcia TIMESTAMPADD(interval; n; dátum) pridáva k dnešnému dňu dátum časový interval n, ktorého hodnoty sú určené parametrom interval. Možné hodnoty parametra intervalu:

  • FRAC_SECOND – mikrosekundy
  • SECOND - sekundy
  • MINUTE – minúty
  • HOUR - hodiny
  • DAY - dni
  • WEEK - týždne
  • MONTH - mesiace
  • ŠTVRŤ - bloky
  • ROK - roky

SELECT TIMESTAMPADD (QUARTER, 1, "2015-09-28")
Výsledok: 28.12.2015

Funkcia SUBTIME (dátum, čas) odpočítava od dátumu dátum časčas. Príklad:

SELECT SUBTIME("2015-09-28 10:30:20", "50:20:19")
Výsledok: 2015-09-26 08:10:01

Výpočet intervalu medzi dátumami

Funkcia TIMEDIFF(dátum1; dátum2) vypočíta rozdiel v hodinách, minútach a sekundách medzi dvoma dátumami dátum1 a dátum2. Príklad:

SELECT TIMEDIFF("2015-09-28 10:30:20", "2015-09-29 10:30:20")
Výsledok: -24:10:00

Funkcia DATEDIFF(dátum1; dátum2) vypočítava rozdiel v dňoch medzi dvoma dátumami, zatiaľ čo hodiny, minúty a sekundy sa pri zadávaní dátumov ignorujú. Príklad:

SELECT DATEDIFF("2015-09-28 00:00:20", "2015-09-27 23:40:20")
Výsledok: 1

Pomocou tejto funkcie je ľahké určiť, koľko dní uplynulo od dátumu uverejnenia článku:

SELECT DATEDIFF (CURDATE(), date_publication) FROM posts WHERE id_post = 1

Funkcia PERIOD_DIFF (obdobie 1, obdobie 2) vypočítava rozdiel v mesiacoch medzi dvoma dátumami. Dátumy musia byť vo formáte RRRRMM. Napríklad, zistime, koľko mesiacov prešlo od januára 2015 do septembra 2015:

SELECT PERIOD_DIFF (201509, 201501)
Výsledok: 9

Funkcia TIMESTAMPDIFF(interval; dátum1; dátum2) vypočíta rozdiel medzi dátumami dátum2 a dátum1 v jednotkách špecifikovaných v parametri interval. V tomto prípade môže interval nadobúdať nasledujúce hodnoty:

  • FRAC_SECOND – mikrosekundy
  • SECOND - sekundy
  • MINUTE – minúty
  • HOUR - hodiny
  • DAY - dni
  • WEEK - týždne
  • MONTH - mesiace
  • ŠTVRŤ - bloky
  • ROK - roky

VYBERTE ČASOVÝ ROZDÍL (HODINA, "2015-09-28 10:30:20", "2015-09-28 19:50:20")
Výsledok: 9

Získavanie rôznych formátov dátumu a času a ďalších informácií

Funkcia DATE (dátum a čas) sa vracia dátum, čas ukončenia. Príklad:

SELECT DATE("28.09.2015 10:30:20")
Výsledok: 28.09.2015

Funkcia TIME (dátum a čas) sa vracia čas, dátum prerušenia. Príklad:

VYBERTE ČAS ("2015-09-28 10:30:20")
Výsledok: 10:30:20

Funkcia TIMESTAMP (dátum) sa vracia v plnom formáte v priebehu času dátumy dátum. Príklad:

TIMESTAMP("28.09.2015")
Výsledok: 2015-09-28 00:00:00

DAY (dátum) A DAYOFMONTH (dátum). Synonymné funkcie, ktoré sa vracajú poradové číslo dňa v mesiaci. Príklad:

SELECT DAY("2015-09-28"), DAYOFMONTH("2015-09-28")
Výsledok: 28 | 28

Funkcie DAYNAME (dátum),DAYOFWEEK (dátum) A WEEKDAY (dátum). Prvá funkcia sa vráti názov dňa v týždni, druhý - číslo dňa v týždni(počítanie od 1 - nedeľa do 7 - sobota), tretie je zároveň číslom dňa v týždni, len ďalšie odpočítavanie (počítanie od 0 - pondelok, do 6 - nedeľa). Príklad:

SELECT DAYNAME("2015-09-28"), DAYOFWEEK("2015-09-28"), WEEKDAY("2015-09-28")
Výsledok: pondelok 2 | 0

Funkcie WEEK (dátum) A WEEKOFYEAR (dátum a čas). Obe funkcie sa vrátia číslo týždňa v roku, len prvý týždeň začína v nedeľu a druhý v pondelok. Príklad:

SELECT WEEK ("2015-09-28 10:30:20"), WEEKOFYEAR ("2015-09-28 10:30:20")
Výsledok: 39 | 40

Funkcia MESIAC (dátum) sa vracia číselná hodnota mesiaca(od 1 do 12) a MONTHNAME (dátum) názov mesiaca. Príklad:

SELECT MONTH("2015-09-28 10:30:20"), MONTHNAME("2015-09-28 10:30:20")
Výsledok: 9 | septembra

Funkcia ŠTVRŤ (dátum) sa vracia číslo bloku rokov (od 1 do 4). Príklad:

VYBER ŠTVRŤ ("2015-09-28 10:30:20")
Výsledok: 3

Funkcia ROK (dátum) sa vracia ročná hodnota(od 1000 do 9999). Príklad:

VYBERTE ROK ("2015-09-28 10:30:20")
Výsledok: 2015

Funkcia DAYOFYEAR (dátum) sa vracia poradové číslo dňa za rok (od 1 do 366). Primer:

SELECT DAYOFYEAR ("2015-09-28 10:30:20")
Výsledok: 271

Funkcia HOUR (dátum a čas) sa vracia hodinová hodnota(od 0 do 23). Príklad:

VYBERTE HODINU ("2015-09-28 10:30:20")
Výsledok: 10

Funkcia MINUTE (dátum a čas) sa vracia hodnotu minút(od 0 do 59). Príklad:

SELECT MINUTE ("2015-09-28 10:30:20")
Výsledok: 30

Funkcia SECOND (dátum a čas) sa vracia hodnotu sekúnd(od 0 do 59). Príklad:

VYBERTE DRUHÚ („2015-09-28 10:30:20“)
Výsledok: 20

Funkcia EXTRAKT (typ OD dátumu) vráti časť dátumu špecifikovanú parametrom type. Príklad:

VYBERTE VÝŤAH (ROK OD "2015-09-28 10:30:20"), EXTRAKT (MESIAC OD "2015-09-28 10:30:20"), EXTRAKT (DEŇ OD "28.09.2015 10:30" :20"), VÝŤAH (HODINA Z "2015-09-28 10:30:20"), EXTRAKT (MINÚTA Z "2015-09-28 10:30:20"), EXTRAKT (DRUHÝ Z "2015-09- 28 10:30:20")
Výsledok: 2015 | 9 | 28 | 10 | 30 | 20

Recipročné funkcie Dnešný dátum) A FROM_DAYS (n). najprv prevedie dátum na počet dní, prešiel od nultého ročníka. Druhý, naopak, akceptuje počet dní, prešiel od roku nula a prevedie ich na dátum. Príklad:

SELECT TO_DAYS ("2015-09-28 10:30:20"), FROM_DAYS (736234)
Výsledok: 736234 | 2015-09-28

Recipročné funkcie UNIX_TIMESTAMP (dátum) A FROM_UNIXTIME (n). najprv prevedie dátum na počet sekúnd prešiel od 1. januára 1970. Druhý, naopak, akceptuje počet sekúnd, od 1. januára 1970 a prevedie ich na dátum. Príklad:

SELECT UNIX_TIMESTAMP ("2015-09-28 10:30:20"), FROM_UNIXTIME (1443425420)
Výsledok: 1443425420 | 28.09.2015 10:30:20

Recipročné funkcie TIME_TO_SEC (čas) A SEC_TO_TIME (n). najprv prevedie čas na počet sekúnd, prešiel od začiatku dňa. Druhý, naopak, berie počet sekúnd od začiatku dňa a prevádza ich na čas. Príklad:

SELECT TIME_TO_SEC ("10:30:20"), SEC_TO_TIME (37820)
Výsledok: 37820 | 10:30:20

Funkcia MAKEDATE (rok, n) vezme rok rok a číslo dňa v roku n a prevedie ich na dátum. Príklad.

SQL pracujúci s dátumami– je taká dôležitá, že sa bez znalosti základných operátorov SQL nezaobídete v žiadnom užitočnom projekte. Čokoľvek sa dá povedať, vo všetkých službách je potrebné pracovať s časom. Spravidla ide o výpočet období od jedného dátumu k druhému, napríklad zobrazenie zoznamu registrovaných používateľov za rok, mesiac, deň, hodinu.

Chcem uviesť množstvo riešení bežných úloh súvisiacich s prácou s dátumami v SQL, s ktorými som sa sám denne stretával, dúfam, že to bude pre vás relevantné a užitočné.

Ako získať aktuálny dátum v SQL
WHERE dátum = CURDATE()
alebo iná možnosť
WHERE dátum = STR_TO_DATE(teraz(), "%Y-%m-%d")

Pridajte jednu hodinu k dátumu v SQL
DATE_ADD("2013-03-30", INTERVAL 1 HODINA)

Pridajte jeden deň k dátumu v SQL
DATE_ADD("2013-03-30", INTERVAL 1 DEŇ)
Podobne môžete k aktuálnemu dátumu pridať ľubovoľný počet dní.

Pridajte jeden mesiac k dátumu v SQL
DATE_ADD("2013-03-30", INTERVAL 1 MESIAC)
Podobne môžete k aktuálnemu dátumu pridať ľubovoľný počet mesiacov.

Získajte včerajší deň v SQL
DATE_ADD(CURDATE(), INTERVAL -1 DEŇ)
alebo
DATE_SUB(CURDATE(), INTERVAL 1 DEŇ)

Získajte dátum začiatku aktuálneho týždňa v SQL
Toto je na prvý pohľad jedna z najťažších úloh, ale dá sa vyriešiť veľmi jednoducho
CURDATE()-WEEKDAY(CURDATE());

Získajte výber od tohto pondelka do aktuálneho dňa v týždni v SQL

Získajte výber od prvého dňa aktuálneho mesiaca po aktuálny deň v týždni v SQL
WHERE (dátum MEDZI (CURDATE()-WEEKDAY(CURDATE())) A CURDATE())

Ako získať dátum narodenia používateľa v SQL
SELECT meno, narodenie, CURRENT_DATE, (YEAR(CURRENT_DATE)-YEAR(nar)) - (RIGHT(CURRENT_DATE,5)

Nájdite všetkých používateľov, ktorí majú narodeniny budúci mesiac v SQL
SELECT meno, narodenie FROM užívateľa WHERE MONTH(narodenie) = MONTH(DÁTUM_PRIDANIE(TERAZ(), INTERVAL 1 MESIAC));
alebo iná možnosť
SELECT meno, narodenie FROM pet WHERE MONTH(birth) = MOD(MONTH(NOW()), 12) + 1;

Okrem vyššie uvedených prípadov práce s dátumami v SQL vám odporúčam prečítať si dokumentáciu pre nasledujúce operátory:
TERAZ()– Vráti aktuálny dátum a čas.
CURDATE()– Vráti aktuálny dátum.
CURTIME()– Vrátime aktuálny čas.
DÁTUM()– Pozostáva z dvoch častí – dátum a čas.
EXTRACT()– Vráti jednu hodnotu dátumu/času.
DATE_ADD()– Pridá do vzorky zadaný počet dní/minút/hodín atď.
DATE_SUB()– Odpočítajte zadaný interval od dátumu.
DATEDIFF()– Vráti hodnotu času medzi dvoma dátumami.
FORMÁT DÁTUMU()– Funkcia pre rôzny výstup časových informácií.

Práca s dátumami v SQL, ako sa ukázalo, nie je taká zložitá a teraz namiesto výpočtu období pomocou PHP to môžete urobiť vo fáze vykonávania dotazu SQL a získať potrebný výber údajov.

Pokračovanie v téme:
Linux

Podrobnejšie študujeme webové rozhranie a všimneme si sekciu, kde sa vyrábajú. Tam si heslo buď nastavíte alebo zmeníte.Ako vidíme na príklade ASUSu, v poradí...