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)
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'
SELECT 6/4;
-> 1.5000SELECT DATE_ADD('2009-01-01', INTERVAL 6/4 HOUR_MINUTE);
-> '2009-01-04 12:20:00'
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'
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
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
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
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-05
test wykonano komendą
S
EL
E
CT
date(now());
EFEKT -> 2010-05-05
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'
patrz opis ADDDATE()
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
Zwraca nazwę dnia tygodnia ( w j. angielskim) z daty
SELECT DAYNAME('2007-02-03');
-> 'Saturday'
Zwraca dzień tygodnia liczbowo z daty gdzie 1=Sunday (Niedziela).....7=Saturday (Sobota)
SELECT DAYOFWEEK('2010-05-05');
-> 4
SELECT DAYOFWEEK(now());
-> 4
Zwraca dzień roku 1...366 z daty
SELECT DAYOFYWAR('2010-05-05');
-> 125
SELECT DAYOFYEAR(now());
-> 125
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(MICROSECOND
FROM '2003-01-02 10:30:00.000123');
-> 123
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
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'
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
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
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
są to synonimy funkcji NOW()
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(godzina,minuta,sekunda)
SELECT MAKETIME(12,15,30);
-> '12:15:30'
analogicznie do HOUR()
zwraca numerycznie numer miesiąca z daty:
SELECT MONTH('2008-02-03');
-> 2
zwraca nazwę miesiąca w j. angielskim
SELECT MONTHNAME('2008-02-03');
-> 'February'
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(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(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
analogicznie do MONTH()
SELECT QUARTER('2008-04-01');
-> 2
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,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'
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(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
analogicznie z ADDTIME()
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(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(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
)
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)
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(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(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(date)
odpowiednik WEEK(date,3) zwraca numer tygodnia z podanej jako argument daty:
SELECT WEEKOFYEAR('2008-02-20');
-> 8
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
REKLAMA |
REKLAMA |
REKLAMA |
REKLAMA |
REKLAMA |
Neuroinformatyka Grupa dla wszystkich zainteresowanych wykorzystaniem metod pomiarów, analizy i modelowania pochodzących z ... |
Politechnika Lubelska Grupa zrzeszająca studentów i absolwentów Politechniki Lubelskiej |
Politechnika Gdańska Grupa zrzeszająca pracowników, studentów i absolwentów Politechniki Gdańskiej. |
Automania Grupa zrzeszająca pasjonatów czterech kółek. |
REKLAMA |
Bardzo gorąco dziękuję za ten manual, jestem pewna, ze nie tylko tych kilka osób z niego skorzystała, które pozostawiły tutaj ślad, ale również i wiel wiele wiecej osób odwiedziało tę stronę i przynajmniej zajrzało i przeczytało co Pan stworzył.
Osobiście stronkę te polecam moim studentom, którzy nie zawsze ogarniają manual do mysql ze strony producenta. Niech nie zaprzestaje Pan dzielenia się swoimi "testami", bo może nie mieć Pan świadomości, a ktoś dzięki Panu może mieć lżej na studiach lub w pracy.
Jeszcze raz gorąco dziękuje za ten wpis i liczę na więcej przykładów i wpisów
Pozdrawiam.
Myslałem że ten dopisek w twoim arcie mówi o tym że gdy mamy ustawiony czas
'1997-12-02 17:41:21' w kolumnie typu datetime zeruje godziny po odjęciu:
'* odejmowanie dni powoduje wyzerowanie godziny'
Ciesze się że to tylko nieporozumienie a nie bug :)
a jeśli w 5.5.2.4 używasz np funkcji NOW zwracającej wartość typu datetime a nie tylko date i dodajesz to wychodzi z godzinami. Wklej komendy jakich używasz do testó
odejmowanie dni SELECT DATE_SUB('1998-01-02 17:41:21', INTERVAL 31 DAY)
skutkowało:
1997-12-02 17:41:21
Jesteś pewny tego zachowania ?
* odejmowanie dni powoduje wyzerowanie godziny
** dodawanie dni do konkretnej daty formatu RRRR-MM-DD w polu DATETIME zapisuje wynik z godziną 00:00:00"
Mi pod mysql 5.5.24 zmienia wraz z godzinami minutami i sekundami
Takie coś widzę na końcu tekstu:
"Jestem autorem tłumaczenia i jego powielanie , kopiowanie musi odbyć się za moją zgodą, kontakt znajdziecie w profilu"
Rozumie, że otrzymałeś zgodę na tłumaczenie? Bo jak nie to Ty jesteś złodziejem. Ale jeśli dany tekst, który tłumaczyłeś jest na licencji która pozwala go powielać to twój tekst tłumaczony również MUSI tez pozwalać.
Więc zmodyfikuj swoje ostrzeżenie tak aby było zgodne z prawdą.
pzdr