W poniższym blogu prezentuję omówienie poleceń baz danych MYSQL w wersji 5.5 dotyczących daty i czasu. Opracowanie jest w j. polskim zachęcam do lektury. Opracowanie opiera się o własne testy oraz o manual do mysql 5.5.0
| Name | Description |
|---|---|
ADDDATE()(v4.1.1) |
Dodaje wartości czasu ( interwały) do dat |
ADDTIME()(v4.1.1) |
Dodaje godzinę |
CONVERT_TZ()(v4.1.3) |
Konwertuje datę między strefami czasowymi |
CURDATE() |
Zwraca bieżącą datę |
CURRENT_DATE(), CURRENT_DATE |
Synonim funkcji CURDATE() |
CURRENT_TIME(), CURRENT_TIME |
Synonim funkcji CURTIME() |
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP |
Synonim funkcji NOW() |
CURTIME() |
Zwraca bieżącą godzinę |
DATE_ADD() |
Dodaje interwały czasowe do dat |
DATE_FORMAT() |
Formatuje datę |
DATE_SUB() |
Odejmuje określone okresy od dat |
DATE()(v4.1.1) |
Wyciąga datę z wyrażenia typu data/czas |
DATEDIFF()(v4.1.1) |
Zwraca różnicę pomiędzy dwiema datami |
DAY()(v4.1.1) |
Synonim funkcji DAYOFMONTH() |
DAYNAME()(v4.1.21) |
Zwraca nazwę dnia tygodnia |
DAYOFMONTH() |
Zwraca liczbowo dzień miesiąca (0-31) |
DAYOFWEEK() |
Zwraca wartość odpowiadającą dniu tygodnia dla argumentu |
DAYOFYEAR() |
Zwraca dzień roku (1-366) |
EXTRACT() |
Wyciąga część daty |
FROM_DAYS() |
Konwertuje numer dnia na datę |
FROM_UNIXTIME() |
Konwertuje Unixową wartość timestamp* na datę |
GET_FORMAT()(v4.1.1) |
Zwraca format daty i czasu |
HOUR() |
Wyciąga godzinę z wartości |
LAST_DAY(v4.1.1) |
Zwraca ostatni dzień miesiąca dla argumentu |
LOCALTIME(), LOCALTIME |
Synonim dla funkcji NOW() |
LOCALTIMESTAMP, LOCALTIMESTAMP()(v4.0.6) |
Synonim dla funkcji NOW() |
MAKEDATE()(v4.1.1) |
Tworzy datę z roku i nr dnia w roku |
MAKETIME(v4.1.1) |
MAKETIME() |
MICROSECOND()(v4.1.1) |
Zwraca wartość mikrosekund z argumentu |
MINUTE() |
Return the minute from the argument |
MONTH() |
Return the month from the date passed |
MONTHNAME()(v4.1.21) |
Zwraca nazwę miesiąca |
NOW() |
Podaje bieżącą datę i czas |
PERIOD_ADD() |
Dodaje okres do roku/miesiąca |
PERIOD_DIFF() |
Zwraca ilość miesięcy pomiędzy datami |
QUARTER() |
Zwraca ilość kwartałów z argumentu |
SEC_TO_TIME() |
Konweruje sekundy do formatu 'HH:MM:SS’ |
SECOND() |
Zwraca liczbowo sekundę (0-59) |
STR_TO_DATE()(v4.1.1) |
Konwertuje napis na datę |
SUBDATE() |
Synonim funkcji DATE_SUB() |
SUBTIME()(v4.1.1) |
Odejmuje godziny |
SYSDATE() |
Zwraca czas w jakim jest wykonywana funkcja |
TIME_FORMAT() |
Formatuje jako czas |
TIME_TO_SEC() |
Zwraca argument skonwertowany na sekundy |
TIME()(v4.1.1) |
Wyciąga część czasu z wyrażenia |
TIMEDIFF()(v4.1.1) |
odejmuje godziny |
TIMESTAMP()(v4.1.1) |
Z pojedynczym argumentem funkcja zwraca datę lub datę i godzinę, z dwoma argumentami zwraca ich sumę |
TIMESTAMPADD()(v5.0.0) |
Dodaje interwał czasu od formatu datagodzina |
TIMESTAMPDIFF()(v5.0.0) |
Odejmuje interwał czasu od formatu datagodzina |
TO_DAYS() |
Zwraca argument daty skonwertowany na dni |
TO_SECONDS()(v5.0.0) |
Zwraca datę lub argument daty/czasu przekonwertowane na ilość sekund od roku 0 |
UNIX_TIMESTAMP() |
Zwraca wartość UNIX timestamp |
UTC_DATE()(v4.1.1) |
Zwraca bieżącądatę UTC |
UTC_TIME()(v4.1.1) |
Zwraca aktualną godzinę UTC |
UTC_TIMESTAMP()(v4.1.1) |
zwraca bieżącą datię i czas UTC |
WEEK() |
Zwraca numer tygodnia |
WEEKDAY() |
Zwraca dzień tygodnia |
WEEKOFYEAR()(v4.1.1) |
Zwraca liczbowo tydzień roku (0-53) |
YEAR() |
Zwraca Rok |
YEARWEEK() |
Zwraca rok i tydzień |
*Timestamp jest formatem przedstawiającym ile sekund upłynęło od 1 stycznia 1970 00:00:00. Np dla daty: 2010-05-04 12:03:27 Timestamp wynosi (1272967407)
ADDDATE(), DATE_ADD()
Funkcja dodaje okresy do dat,
Są 2 sposoby formatowania polecenia:
ADDDATE(’data’,interwal [ilość][jednostka])
np adddate(’2010-03-02′, interval 31 day)
dopuszczalne jednostki: day,month,year,week
ADDDATE([data],[ilość dni])
np ADDDATE(now(),20 ),ADDDATE(’2010-05-04′,20 )
test wykonałem komendą:
update test set rok=adddate(’2010-03-02′, interval xx day) where [warunek];
| adddate() | efekt |
| adddate(now(), interval 1 day) | 2010-05-05 13:32:00 |
| adddate(now(), interval 41 day) | 2010-06-14 13:32:00 |
| adddate(now(), interval 241 day) | 2010-12-31 13:32:00 |
| adddate(now(), interval 33131 day) | 2101-01-18 13:32:00 |
| adddate(’2287-01-30′, interval -233131 day) | 1648-10-15 00:00:00* |
| adddate(’2010-02-27′, interval 61 day) | 2010-04-29 00:00:00** |
Test wykonałem na polu typu DATETIME stąd wartości godzin po modyfikowanych datach, komenda modyfikuje tylko daty
* odejmowanie dni powoduje wyzerowanie godziny
** dodawanie dni do konkretnej daty formatu RRRR-MM-DD w polu DATETIME zapisuje wynik z godziną 00:00:00
Poniższa tabela prezentuje jednostki i format wartości czasu jaki jest dodawany od dat
jednostka wartość |
Oczekiwany Format wyrażenia |
MICROSECOND |
MICROSECONDS |
SECOND |
SECONDS |
MINUTE |
MINUTES |
HOUR |
HOURS |
DAY |
DAYS |
WEEK |
WEEKS |
MONTH |
MONTHS |
QUARTER |
QUARTERS |
YEAR |
YEARS |
SECOND_MICROSECOND |
'SECONDS.MICROSECONDS' |
MINUTE_MICROSECOND |
'MINUTES:SECONDS.MICROSECONDS' |
MINUTE_SECOND |
'MINUTES:SECONDS' |
HOUR_MICROSECOND |
'HOURS:MINUTES:SECONDS.MICROSECONDS' |
HOUR_SECOND |
'HOURS:MINUTES:SECONDS' |
HOUR_MINUTE |
'HOURS:MINUTES' |
DAY_MICROSECOND |
'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' |
DAY_SECOND |
'DAYS HOURS:MINUTES:SECONDS' |
DAY_MINUTE |
'DAYS HOURS:MINUTES' |
DAY_HOUR |
'DAYS HOURS' |
YEAR_MONTH |
'YEARS-MONTHS' |
Prezentacja:
SELECT '2008-12-31 23:59:59' + INTERVAL 1 SECOND;
-> '2009-01-01 00:00:00'SELECT INTERVAL 1 DAY + '2008-12-31';
-> '2009-01-01'SELECT '2005-01-01' - INTERVAL 1 SECOND;
-> '2004-12-31 23:59:59'SELECT DATE_ADD('2000-12-31 23:59:59',INTERVAL 1 SECOND);
-> '2001-01-01 00:00:00'SELECT DATE_ADD('2010-12-31 23:59:59',INTERVAL 1 DAY);
-> '2011-01-01 23:59:59'SELECT DATE_ADD('2100-12-31 23:59:59',INTERVAL '1:1' MINUTE_SECOND);
-> '2101-01-01 00:01:00'SELECT DATE_SUB('2005-01-01 00:00:00',INTERVAL '1 1:1:1' DAY_SECOND);
-> '2004-12-30 22:58:59'SELECT DATE_ADD('1900-01-01 00:00:00',INTERVAL '-1 10' DAY_HOUR);
-> '1899-12-30 14:00:00'SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02'SELECT DATE_ADD('1992-12-31 23:59:59.000002',INTERVAL '1.999999' SECOND_MICROSECOND);
-> '1993-01-01 00:00:01.000001'
- pole [Ilość] traktowane jest jako napis więc ilość czasu o jaką zwiększamy możemy zdefiniować jako 6/4 co przy typie HOUR_MINUTE spowoduje dodanie 1 godziny i 5000 .minut
SELECT 6/4;
-> 1.5000SELECT DATE_ADD('2009-01-01', INTERVAL 6/4 HOUR_MINUTE);
-> '2009-01-04 12:20:00'
- aby się upewnić że podane dane zostaną zinterpretowane tak jak sobie tego życzysz można użyć operacji CAST() aby 6/4 zostało potraktowane jako 1 godzina 5 minut
konwertujemy to do wartości dziesiętnej z jedną cyfrą ułamkową:SELECT CAST(6/4 AS DECIMAL(3,1));
-> 1.5SELECT DATE_ADD('1970-01-01 12:00:00',INTERVAL CAST(6/4 AS DECIMAL(3,1)) HOUR_MINUTE);
-> '1970-01-01 13:05:00'
- Jeśli masz zamiar dodać lub odjąć od dat okres zawierający część czasu ( godzina, minuta itd) wynik jest automatycznie konwertowany na wartość typu DATETIME
ADDTIME()
informacje przeczytaj również z komendy adddate()!
Funkcja dodaje interwały czasu dni i godziny (w dniach) do dat,test wykonałem komendą:
update test set rok=addtime(’2010-03-02′, interval 31 day) where [warunek];
| addtime() | efekt |
| addtime(now(), '1 1:1:1.000002′) | 2010-05-05 14:48:16 |
| addtime(’2009-12-31 23:59:59.999999′, ’51 51:15:13.000002′) | 2010-02-04 22:59:58 |
| addtime(’2009-12-31 23:59:59.999999′, ’-51 51:15:13.000002′) | 2009-11-27 01:00:00* |
| addtime(’2009-12-31 23:59:59.999999′, ’-30 11:15:13.000002′) | 2009-12-01 12:44:46 |
Test wykonałem na polu typu DATETIME
* daty wsteczne, powodujące zmianę miesiąca na wcześniejszy powodują przestawienie godziny na 01:00:00
CURTIME()
test wykonałem poleceniem
update test set godzina= curtime() where id=5;
należy pamiętać że komenda działa tylko w kolumnach typu TIME
wykonana na polu typu DATETIME zwróciła wynik 0000-00-00 00:00:00
Zwraca wartość bieżącego czasu w 2 formatach: 'HH:MM:SS' lub HHMMSS.uuuuuu
SELECT CURTIME();
-> '23:50:26'SELECT CURTIME() + 0;
-> 235026.000000
CURDATE()
test wykonałem komendą:
update test set aktualnadata= curdate() where id = 5;
Wykonanie jej na polu typu TIME nie zwraca wartości
Wykonana na polu DATETIME zwraca wynik 2010-05-04 00:00:00
i oczywiście w polu DATE zwraca 2010-05-04
Zwraca wartości w 2 formatach:'YYYY-MM-DD' lub YYYYMMDD
SELECT CURDATE();
-> '2010-05-05'SELECT CURDATE() + 0;
-> 20100505
DATE()
Komenda zwraca datę z wyrażenia lub funkcji, której wynikiem jest data lub data i czas
test wykonano komendą SELECT DATE('2010-05-05 14:10:14');
EFEKT -> 2010-05-05test wykonano komendą SELECT date(now());
EFEKT -> 2010-05-05
DATE_FORMAT()
Formatuje datę zgodnie ze zdefiniowanym formatem
tabela dostępnych formatów znajduje się poniżej:
| format | opis |
%a |
Zwraca dzień tyogdnia z daty (Sun..Sat) |
%b |
Zwraca nazwię miesiąca z daty (Jan..Dec) |
%c |
Zwraca miesiąc wartością numeryczną (0..12) |
%D |
Zwraca dzień miesiąca z końcówką (suffix angielski) (0th, 1st, 2nd, 3rd, …) |
%d |
Zwraca dzień miesiąca numerycznie formatu: (00..31) |
%e |
Zwraca dzień miesiąca numerycznie (0..31) |
%f |
Zwraca wartość mikrosekund (000000..999999) |
%H |
Godzina (00..23) |
%h |
Godzina (01..12) |
%I |
Godzina (01..12) |
%i |
Minuty numerycznie (00..59) |
%j |
Dzień roku (001..366) |
%k |
Godzina (0..23) |
%l |
Godzina (1..12) |
%M |
Angielska nazwa miesiąca (January..December) |
%m |
Miesiąc numerycznie 2 -cyfrowo (00..12) |
%p |
pora dnia przed południem - AM i po południu PM |
%r |
Czas w formacie 12-godzinnym (hh:mm:ss) po któym występuje info AM/PM |
%S |
Sekundy(00..59) |
%s |
Sekundy(00..59) |
%T |
Czas w formacie 24-godzinnym (hh:mm:ss) |
%U |
Tydzień (00..53), gdzie niedziela jest pierwszym dniem tygodnia |
%u |
Tydzień (00..53), gdzie poniedziałek jest pierwszym dniem tygodnia |
%V |
Tydzień (01..53), gdzie niedziela jest pierwszym dniem tygodnia; używane z %X |
%v |
Tydzień (01..53), gdzie poniedziałek jest pierwszym dniem tygodnia, używane z %x |
%W |
Nazwa dnia tygodnia (angielska) (Sunday..Saturday) |
%w |
Dzień tygodnia liczbowo (0=Niedziela..6=Sobota) |
%X |
Rok dla tygodnia, w którym niedziela jest pierwszym dniem tygodnia numerycznie 4 cyfry używane z %V |
%x |
Rok dla tygodnia, w którym poniedziałek jest pierwszym dniem tygodnia numerycznie 4 cyfry używane z %v |
%Y |
Rok numerycznie 4 cyfry |
%y |
Rok numerycznie 2 cyfry |
%% |
A literal “%” character – tu coś nie działa |
% |
x, for any “x” not listed above |
Przykłady:
SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
-> 'Sunday October 2009′
SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
-> ’22:23:00′
SELECT DATE_FORMAT('1900-10-04 22:23:00', '%D %y %a %d %m %b %j');
-> '4th 00 Thu 04 10 Oct 277′
SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');
-> ’22 22 10 10:23:00 PM 22:23:00 00 6′
SELECT DATE_FORMAT('1999-01-01', '%X %V');
-> '1998 52′
SELECT DATE_FORMAT('2006-06-00', '%d');
-> ’00’
DATE_SUB()
patrz opis ADDDATE()
DAY() , DAYOFMONTH()
Zwraca dzień miesiąca z daty, przyjmuje wartości 1…31 lub 0 dla dat postaci 0000-00-00 2008-00-00 itp
SELECT DAYOFMONTH('2007-02-03');
-> 3
DAYNAME()
Zwraca nazwę dnia tygodnia ( w j. angielskim) z daty
SELECT DAYNAME('2007-02-03');-> 'Saturday'
DAYOFWEEK()
Zwraca dzień tygodnia liczbowo z daty gdzie 1=Sunday (Niedziela)…..7=Saturday (Sobota)
SELECT DAYOFWEEK(’2010-05-05′);
-> 4
SELECT DAYOFWEEK(now());
-> 4
DAYOFYEAR()
Zwraca dzień roku 1…366 z daty
SELECT DAYOFYWAR(’2010-05-05′);
-> 125
SELECT DAYOFYEAR(now());
-> 125
EXTRACT()
Wyciąga zdefiniowaną część z daty, używa tych samych elementów definiujących jednostki co ADDDATE() DATESUB() itd.
SELECT EXTRACT(YEAR FROM '2009-07-02');
-> 2009SELECT EXTRACT(YEAR_MONTH FROM '2009-07-02 01:02:03');
-> 200907SELECT EXTRACT(DAY_MINUTE FROM '2009-07-02 01:02:03');
-> 20102SELECT EXTRACT(MICROSECONDFROM '2003-01-02 10:30:00.000123');
-> 123
FROM_DAYS()
polecenie zwraca rok od roku 0000-00-00 po upłynięciu ilości dni podanych w argumencie
SELECT FROM_DAYS(366);
->0001-01-01
SELECT FROM_DAYS(734262);
-> 2010-05-05
FROM_UNIXTIME()
Zwraca reprezentację argumentu unix_timestamp w formatach 'YYYY-MM-DD HH:MM:SS' lub YYYYMMDDHHMMSS.uuuuuuw zależności jaka funkcja jest użyta w funkcji lub numerycznej zawartości.
Jeżeli format jest zdefiniowany wynik będzie sformatowany zgodnie z napisem formatującym, który definiuje się analogicznie z formatami funkcji DATE_FORMAT()
SELECT FROM_UNIXTIME(1196440219);
-> '2007-11-30 10:30:19'SELECT FROM_UNIXTIME(1196440219) + 0;
-> 20071130103019.000000SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x');
-> '2007 30th November 10:30:59 2007'
GET_FORMAT()
Funkcja jest używana w połączeniu z DATE_FORMAT() i STR_TO_DATE(). Określa sposób w jaki ma być zaprezentowana data.
| Function Call | Result |
GET_FORMAT(DATE,'USA') |
'%m.%d.%Y' |
GET_FORMAT(DATE,'JIS') |
'%Y-%m-%d' |
GET_FORMAT(DATE,'ISO') |
'%Y-%m-%d' |
GET_FORMAT(DATE,'EUR') |
'%d.%m.%Y' |
GET_FORMAT(DATE,'INTERNAL') |
'%Y%m%d' |
GET_FORMAT(DATETIME,'USA') |
'%Y-%m-%d %H.%i.%s' |
GET_FORMAT(DATETIME,'JIS') |
'%Y-%m-%d %H:%i:%s' |
GET_FORMAT(DATETIME,'ISO') |
'%Y-%m-%d %H:%i:%s' |
GET_FORMAT(DATETIME,'EUR') |
'%Y-%m-%d %H.%i.%s' |
GET_FORMAT(DATETIME,'INTERNAL') |
'%Y%m%d%H%i%s' |
GET_FORMAT(TIME,'USA') |
'%h:%i:%s %p' |
GET_FORMAT(TIME,'JIS') |
'%H:%i:%s' |
GET_FORMAT(TIME,'ISO') |
'%H:%i:%s' |
GET_FORMAT(TIME,'EUR') |
'%H.%i.%s' |
GET_FORMAT(TIME,'INTERNAL') |
'%H%i%s' |
TIMESTAMP może również być używany jako pierwszy argument w funkcji GET_FORMAT, w tym przypadku funkcja zwróci te same wartości co DATETIME
HOUR()
funkcja zwraca godzinę z czasu. może przyjmować wartości większe od 23.
SELECT HOUR('10:05:03');
-> 10SELECT HOUR('272:59:59');
-> 272
LAST_DAY()
Zwraca datę odpowiadającą ostatniemu dniu miesiąca z daty będącej argumentem funkcji. Jeśli argument jest błędną datą zwracana jest wartość NULL
SELECT LAST_DAY('2003-02-05');
-> '2003-02-28'SELECT LAST_DAY('2004-02-05');
-> '2004-02-29'SELECT LAST_DAY('2004-01-01 01:01:01');
-> '2004-01-31'SELECT LAST_DAY('2003-03-32');
-> NULL
LOCALTIME, LOCALTIME(), LOCALTIMESTAMP, LOCALTIMESTAMP()
są to synonimy funkcji NOW()
MAKEDATE()
MAKEDATE(rok,dzień roku)
Zwraca datę z argumentów – roku i dnia roku
SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);
-> '2011-01-31', '2011-02-01'SELECT MAKEDATE(2011,365), MAKEDATE(2014,365);
-> '2011-12-31', '2014-12-31'SELECT MAKEDATE(2011,0);
-> NULL
MAKETIME()
MAKETIME(godzina,minuta,sekunda)
SELECT MAKETIME(12,15,30);
-> '12:15:30'
MINUTE() , MICROSECOND(),SECOND()
analogicznie do HOUR()
MONTH()
zwraca numerycznie numer miesiąca z daty:
SELECT MONTH('2008-02-03');
-> 2
MONTHNAME()
zwraca nazwę miesiąca w j. angielskim
SELECT MONTHNAME('2008-02-03');
-> 'February'
NOW()
Funkcja zwraca aktualną datę i godzinę
update test set aktualnadata= now() where id = 5;
| Typ pola | efekt powyższej komendy |
| DATE | 2010-05-05 |
|
TIME |
14:10:14 |
| DATETIME | 2010-05-05 14:10:14 |
SELECT NOW();
-> 2010-05-05 15:51:15
SELECT NOW()+0;
-> 20100505155135.000000
PERIOD_ADD()
PERIOD_ADD(p,n)
dodaje n miesięcy do daty p, format daty to RRRMM lub RRMM, argument p nie jest wartością daty
SELECT PERIOD_ADD(200801,2);
-> 200803
PERIOD_DIFF()
PERIOD_DIFF(p1,p2)
zwraca różnicę w miesiącach z 2 dat, które powinny być formatu RRRRMM lub RRMM
SELECT PERIOD_DIFF(200802,200703);
-> 11
QUARTER()
analogicznie do MONTH()
SELECT QUARTER('2008-04-01');
-> 2
SEC_TO_TIME()
SEC_TO_TIME(sekundy)
Zwraca godzinę jaką tworzy podana w argumencie liczba sekund.
SELECT SEC_TO_TIME(2378);
-> '00:39:38'SELECT SEC_TO_TIME(2378) + 0;
-> 3938
STR_TO_DATE()
STR_TO_DATE(str,format)
Jest odwrotnością DATE_FORMAT(). Pobiera napis (str) oraz format a zwraca wartość typu DATETIME jeżeli napis (str) posiada obie części – datę i czas lub zwraca wartość DATE lub TIME jesli str zawiera tylko jedną z nich. Jeżeli któryś z parametrów jest niewłaściwy zwracana jest wartość NULL
SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');
-> '2013-05-01'SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');
-> '2013-05-01'
Skanowanie rozpoczyna się na początku napisu (str) i zwraca błąd jeśli znaleziony format nie pasuje do str. Wszystkie dodatkowe znaki na końcu str poza formatem są ignorowane
SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s');
-> '09:30:17'SELECT STR_TO_DATE('a09:30:17','%h:%i:%s');
-> NULLSELECT STR_TO_DATE('09:30:17a','%h:%i:%s');
-> '09:30:17'
Nieokreślona data lub okres czasowy konwertowane są na wartość 0, niekompletne lub częściowo niepoprawne części str powodują wyzerowanie całego bądź części wyniku.
SELECT STR_TO_DATE('abc','abc');
-> '0000-00-00'SELECT STR_TO_DATE('9','%m');
-> '0000-09-00'SELECT STR_TO_DATE('9','%s');
-> '00:00:09'
Daty zerowe bądź częściowo zerowe są dozwolone dopóki tryb SQL nie będzie zabraniał takich wartości
SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');
-> '0000-00-00'SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
-> '2004-04-31'
Ważne
Nie możesz używać formatu "%X%V" aby konwertować ciąg znaków postaci rok-tydzień ponieważ kombinacja rok-tydzień nie jest poprawnie interpretowana jeżeli ilość tygodni przekracza granicę miesiąca .A by dokonować wartości rok-tydzień na dacie powinno się również precyzować dzień tygodnia .
SELECT STR_TO_DATE('200442 Monday', '%X%V %W');
-> '2004-10-18'
SUBDATE()
SUBDATE(date,INTERVAL,expr,unit), SUBDATE(expr,days)
kiedy używamy pierwszego zapisu SUBDATE() jest synonimem DATE_SUB
zastosowanie analogiczne z DATE_ADD tam też patrz przykłady
SUBTIME()
analogicznie z ADDTIME()
TIME()
Funkcja zwraca wartość godziny z podanego argumentu test wykonano komendą
insert into tabela (`kolumna`) values (time([argument liczbowy]))
| time([argument liczbowy]) | wartość zapisana w tabeli |
| time(6) | 00:00:06 |
| time(3600) | 00:36:00 |
| time(133600) | 13:36:00 |
| time(1333600) | 133:36:00 |
| time(13333600) | 838:59:59* |
* maksymalna wartość godziny jaką mozna zapisać używając funkcji time()
TIMEDIFF()
TIMEDIFF(expr1, expr2)
Podaje różnicę w wartościach czasu pomiędzy wyrażeniami expr1 (expression1) i expr 2, oba jednak muszą być tego samego typu:
SELECT TIMEDIFF('2000:01:01 00:00:00', '2000:01:01 00:00:00.000001');
-> ’-00:00:00.000001′SELECT TIMEDIFF('2008-12-31 23:59:59.000001', '2008-12-30 01:01:01.000002');
-> ’46:58:57.999999′
TIMESTAMP()
TIMESTAMP(expr), TIMESTAMP(expr1,expr2)
Z pojedynczym argumentem expr (expression) powoduje zwrócenie daty i godziny (w formacie DATETIME) natomiast przy 2 argumentach expr1 i expr2 powoduje wartości typu DATETIME sumy argumentów:
SELECT TIMESTAMP('2003-12-31');
-> '2003-12-31 00:00:00′SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');
-> '2004-01-01 00:00:00′
TIMESTAMPADD()
TIMESTAMPADD(unit,interval,datetime_expr)
Dodaje wartość całkowitą do daty dub wartości typu DATETIME. argument unit powinien być jednym z następujących:
MICROSECOND , SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.
SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');
-> '2003-01-02 00:01:00′SELECT TIMESTAMPADD(WEEK,1,'2003-01-02');
-> '2003-01-09′
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
unit,datetime_expr1,datetime_expr2)TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Podaje różnicę pomiędzy dwiema wartościami typu DATETIME. Wartości mogą być typu DATE lecz część czasowa będzie wtedy przyjęta za 00:00:00. Wynik jest wartością całkowitą wyrażoną w jednostkach unit:
MICROSECOND , SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.
przykłady:SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
-> 3SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
-> -1SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');
-> 128885
TIME_FORMAT()
TIME_FORMAT(time,format)
komendy używa się jak DATE_FORMAT(), jednak format może zawierać formaty przypisane godzinom, minutom sekundom. Inne formaty powodują wyświetlenie wartości NULL.
Gdy ilość godzin jest większa niż23 formaty %H i %k powodują wyświetlenie wartości większej niż standardowy zakres 0…23, inny format powoduje wyświetlenie czasu modulo 12.
SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');
-> '100 100 04 04 4’
TIME_TO_SEC()
TIME_TO_SEC(time)
Zwraca argument czasu jako sekundy:
SELECT TIME_TO_SEC('22:23:00');
-> 80580SELECT TIME_TO_SEC('00:39:38');
-> 2378
TO_DAYS( )
TO_DAYS(date)
Zwraca ilość dni od roku 0 do daty podanej jako argument np:
SELECT TO_DAYS(950501);
-> 728779SELECT TO_DAYS('2007-10-07');
-> 733321
TO_SECONDS( )
TO_SECONDS(date) dostępne od MYSQL 5.5.0
Zwraca ilość sekund od roku 0 do daty podanej jako argument np:
SELECT TO_SECONDS(950501);
-> 62966505600SELECT TO_SECONDS('2009-11-29');
-> 63426672000SELECT TO_SECONDS('2009-11-29 13:43:32');
-> 63426721412
WEEK()
WEEK(date,mode)
Funkcja zwraca numer tygodnia dla daty. Dwa argumenty pozwalają na wybór typu tygodnia tzn czy ma zaczynać się od niedzieli czy poniedziałku, czy wartość ma być wyświetlana z zakresu 0…53 czy 1…53
| Mode | First day of week | Range | Week 1 is the first week … |
| 0 | Sunday | 0-53 | with a Sunday in this year |
| 1 | Monday | 0-53 | with more than 3 days this year |
| 2 | Sunday | 1-53 | with a Sunday in this year |
| 3 | Monday | 1-53 | with more than 3 days this year |
| 4 | Sunday | 0-53 | with more than 3 days this year |
| 5 | Monday | 0-53 | with a Monday in this year |
| 6 | Sunday | 1-53 | with more than 3 days this year |
| 7 | Monday | 1-53 | with a Monday in this year |
SELECT WEEK('2008-02-20');
-> 7
SELECT WEEK('2008-02-20',0);
-> 7
SELECT WEEK('2008-02-20',1)
-> 8
SELECT WEEK('2008-12-31',1);
-> 53
WEEKDAY()
WEEKDAY(date)
Zwraca numer dnia tygodnia z podanej daty 0 – poniedziałek 6-niedziela
SELECT WEEKDAY('2008-02-03 22:23:00');
-> 6SELECT WEEKDAY('2007-11-06');
-> 1
WEEKOFYEAR()
WEEKOFYEAR(date)
odpowiednik WEEK(date,3) zwraca numer tygodnia z podanej jako argument daty:
SELECT WEEKOFYEAR('2008-02-20');
-> 8
YEAR()
YEAR(date)
Zwraca wartość roku z daty zakres 1000….9999
SELECT YEAR('1987-01-01');
-> 1987
Oryginalny text w j. angielskim znajduje się TUTAJ
Jestem autorem tłumaczenia i jego powielanie , kopiowanie musi odbyć się za moją zgodą, kontakt znajdziecie w profilu