Funkcje bazy danych MySQL 5.5 - Data i Czas - SQL - MYSQL - TIME() - DAYOFWEEK() - ADDDATE() - ADDTIME() - CONVERT_TZ() - CURDATE() - CURRENT_DATE() - CURRENT_DATE - CURRENT_TIME() - CURRENT_TIME - CURRENT_TIMESTAMP() - CURRENT_TIMESTAMP - CURTIME() - DATE_ADD() - DATE_FORMAT() - DATE_SUB() - DATE() - DATEDIFF() - DAY() - DAYNAME() - DAYOFMONTH() - DAYOFYEAR() - EXTRACT() - FROM_DAYS() - FROM_UNIXTIME() - GET_FORMAT() - HOUR() - LAST_DAY - LOCALTIME() - LOCALTIME - LOCALTIMESTAMP - LOCALTIMESTAMP() - MAKEDATE() - MAKETIME - MICROSECOND() - MINUTE() - MONTH() - MONTHNAME() - NOW() - PERIOD_ADD() - PERIOD_DIFF() - QUARTER() - SEC_TO_TIME() - SECOND() - STR_TO_DATE() - SUBDATE() - SUBTIME() - SYSDATE() - TIME_FORMAT() - TIME_TO_SEC() - TIMEDIFF() - TIMESTAMP() - TIMESTAMPADD() - TIMESTAMPDIFF() - TO_DAYS() - TO_SECONDS() - UNIX_TIMESTAMP() - UTC_DATE() - UTC_TIME() - UTC_TIMESTAMP() - WEEK() - WEEKDAY() - WEEKOFYEAR() - YEAR() - YEARWEEK() - MYSQL 5.5 - MYSQL 5.5.0
Mouser Electronics Poland   Przedstawicielstwo Handlowe Paweł Rutkowski   Amper.pl sp. z o.o.  

Energetyka, Automatyka przemysłowa, Elektrotechnika

Dodaj firmę Ogłoszenia Poleć znajomemu Dodaj artykuł Newsletter RSS
strona główna BAZA WIEDZY Funkcje bazy danych MySQL 5.5 - Data i Czas
drukuj stronę
poleć znajomemu

Funkcje bazy danych MySQL 5.5 - Data i Czas

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_DATESynonim funkcji CURDATE()
CURRENT_TIME(), CURRENT_TIMESynonim funkcji CURTIME()
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMPSynonim 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(), LOCALTIMESynonim 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 
MICROSECONDMICROSECONDS
SECONDSECONDS
MINUTEMINUTES
HOURHOURS
DAYDAYS
WEEKWEEKS
MONTHMONTHS
QUARTERQUARTERS
YEARYEARS
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.5000
SELECT 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.5
SELECT 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-05
test 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:

formatopis
%aZwraca dzień tyogdnia z daty  (Sun..Sat)
%bZwraca nazwię miesiąca z daty (Jan..Dec)
%cZwraca miesiąc wartością numeryczną (0..12)
%DZwraca dzień miesiąca z końcówką (suffix angielski) (0th, 1st, 2nd, 3rd, …)
%dZwraca dzień miesiąca numerycznie formatu: (00..31)
%eZwraca dzień miesiąca numerycznie (0..31)
%fZwraca wartość mikrosekund (000000..999999)
%HGodzina (00..23)
%hGodzina (01..12)
%IGodzina (01..12)
%iMinuty numerycznie (00..59)
%jDzień roku (001..366)
%kGodzina (0..23)
%lGodzina (1..12)
%MAngielska nazwa miesiąca (January..December)
%mMiesiąc numerycznie 2 -cyfrowo (00..12)
%ppora dnia przed południem - AM i po południu PM
%rCzas w formacie 12-godzinnym (hh:mm:ss) po któym występuje info AM/PM
%SSekundy(00..59)
%sSekundy(00..59)
%TCzas w formacie 24-godzinnym (hh:mm:ss)
%UTydzień (00..53), gdzie niedziela jest pierwszym dniem tygodnia
%uTydzień (00..53), gdzie poniedziałek jest pierwszym dniem tygodnia
%VTydzień (01..53), gdzie niedziela jest pierwszym dniem tygodnia; używane z  %X
%vTydzień (01..53), gdzie poniedziałek jest pierwszym dniem tygodnia, używane z  %x
%WNazwa dnia tygodnia (angielska) (Sunday..Saturday)
%wDzień tygodnia liczbowo (0=Niedziela..6=Sobota)
%XRok dla tygodnia, w którym niedziela jest pierwszym dniem tygodnia numerycznie 4 cyfry używane z %V
%xRok dla tygodnia, w którym poniedziałek jest pierwszym dniem tygodnia numerycznie 4 cyfry używane z %v
%YRok numerycznie 4 cyfry
%yRok numerycznie 2 cyfry
%%A literal “%” character - tu coś nie działa
%xx, 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');
-> 2009
SELECT EXTRACT(YEAR_MONTH FROM '2009-07-02 01:02:03');
-> 200907
SELECT EXTRACT(DAY_MINUTE FROM '2009-07-02 01:02:03');
-> 20102
SELECT EXTRACT(MICROSECOND FROM '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.000000
SELECT 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 CallResult
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');
-> 10
SELECT 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 polaefekt powyższej komendy
DATE2010-05-05

TIME

14:10:14
DATETIME2010-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');
-> NULL
SELECT 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)

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');
-> 3
SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
-> -1
SELECT 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');
-> 80580
SELECT 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);
-> 728779
SELECT 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);
-> 62966505600
SELECT TO_SECONDS('2009-11-29');
-> 63426672000
SELECT 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

ModeFirst day of weekRangeWeek 1 is the first week …
0Sunday0-53with a Sunday in this year
1Monday0-53with more than 3 days this year
2Sunday1-53with a Sunday in this year
3Monday1-53with more than 3 days this year
4Sunday0-53with more than 3 days this year
5Monday0-53with a Monday in this year
6Sunday1-53with more than 3 days this year
7Monday1-53with 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');
-> 6
SELECT 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

follow us in feedly
Średnia ocena:
 
REKLAMA

Otrzymuj wiadomości z rynku elektrotechniki i informacje o nowościach produktowych bezpośrednio na swój adres e-mail.

Zapisz się
Administratorem danych osobowych jest Media Pakiet Sp. z o.o. z siedzibą w Białymstoku, adres: 15-617 Białystok ul. Nowosielska 50, @: biuro@elektroonline.pl. W Polityce Prywatności Administrator informuje o celu, okresie i podstawach prawnych przetwarzania danych osobowych, a także o prawach jakie przysługują osobom, których przetwarzane dane osobowe dotyczą, podmiotom którym Administrator może powierzyć do przetwarzania dane osobowe, oraz o zasadach zautomatyzowanego przetwarzania danych osobowych.
Komentarze (12)
Dodaj komentarz:  
Twój pseudonim: Zaloguj
Twój komentarz:
dodaj komentarz
No avatar
Magdalena M.
Witam serdecznie,
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.
No avatar
Gość
czesc dawid
No avatar
Gość
Bardzo mi się przydało to zestawienie, świetna sprawa. Dziękuję.
Brak obrazka
ok, cieszę sie że sprawa wyjaśniona ;)
No avatar
Gość
Chyba Cię nie zrozumiałem wcześniej ...
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 :)
Brak obrazka
jeśli masz natomiast tylko datę (zapisywanąw polu typu DATE nie DATETIME) a zapisujesz ją w polu datetime to domyślnie jest uzupełniana ona o część godziny 00:00:00 bo nie wie jaką ma godzinę wziąć. wiec logiczne jest że data z dopiskiem 00:00:00 zwiększona o ilość dni będzie również z częścią czasu 00:00:00.

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ó
Brak obrazka
w mysql 5.5.28

odejmowanie dni SELECT DATE_SUB('1998-01-02 17:41:21', INTERVAL 31 DAY)

skutkowało:
1997-12-02 17:41:21
No avatar
acidm
Pod mysql 5.1 to samo .
Jesteś pewny tego zachowania ?
No avatar
acidm
"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"

Mi pod mysql 5.5.24 zmienia wraz z godzinami minutami i sekundami
No avatar
Gość
Do autora:
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ą.
Brak obrazka
będą wkrótce. może mi ktoś jeszcze w tym pomoże. Sporo przy tym pracy żeby wszystko przetestować aby ewentualne błędy wyłapać
No avatar
Mysql'er
dzięki, tego było mi trzeba szczególnie że angielski leży i kwiczy. Na prawdę dobre opracowanie, czy mogę liczyć na pozostałe części manuala?
pzdr

REKLAMA
REKLAMA
REKLAMA
REKLAMA
INTELIGENTNE BUDYNKI INTELIGENTNE BUDYNKI Rynek budownictwa energooszczędnego w Polsce dopiero się rozwija, rośnie również zainteresowanie ...
Inteligentny dom Inteligentny dom Celem grupy są tematy związane z systemami Inteligentnego Domu. Poruszane są tu tematy o produktach i ...
Oświetlenie LED Oświetlenie LED Grupa zajmująca się tematami związanymi z technologią LED.
Serwery dedykowane LINUX Serwery dedykowane LINUX Problemy,porady, ciekawe rozwiązania związane z serwerami dedykowanymi postawionymi na LINUX'is ...
REKLAMA
Nasze serwisy:
elektrykapradnietyka.com
przegladelektryczny.pl
rynekelektroniki.pl
automatykairobotyka.pl
budowainfo.pl