[MySQL] W jaki sposób zmienić format daty pobieranej z bazy danych ?

Bazy danych
[MySQL] W jaki sposób zmienić format daty pobieranej z bazy danych ?

Bazy danych udostępniają specjalne funkcje formatujące daty pozwalając na dowolną reprezentację przechowywanej daty w bazie. W przypadku bazy MySQL służy do tego funkcja DATE_FORMAT.

Zakładając że posiadamy tabele wyglądającą w następujący sposób:

+-----+---------------------+------------+
|  id | data                | nowa_data  |
+-----+---------------------+------------+
|  1  | 2007-06-18 13:45:08 | 18.01.2007 |
|  2  | 2006-12-22 08:24:36 | 22.12.2006 |
+-----+---------------------+------------+

Aby w ten sposób zmienić reprezentację daty z pola data musimy użyć następującego zapytania:

SELECT 
    *, 
    DATE_FORMAT(data, '%d.%m.%Y') AS nowa_data 
FROM 
    nazwa_tabeli

Funkcja DATE_FORMAT, przyjmuje dwa parametry pierwszy to data i/lub czas zaś drugi to opis formatowania, który poprzez znaczniki definiuje wygląd daty.
[table]

Znacznik Opis
%a Skrócona nazwa dnia tygodnia (Sun..Sat)
%b Skrócona nazwa miesiąca (Jan..Dec)
%c Miesiąc, liczbowo (0..12)
%D Dzień miesiąca z angielskim sufiksem (0th,1st, 2nd, 3rd, …)
%d Dzień miesiąca, liczbowo (00..31)
%e Dzień miesiąca, liczbowo (0..31)
%f Mikrosekundy (000000..999999)
%H Godzina (00..23)
%h Godzina (01..12)
%I Godzina (01..12)
%i Minuty, liczbowo (00..59)
%j Dzień w roku (001..366)
%k Godzina (0..23)
%l Godzina (1..12)
%M Nazwa miesiąca (January..December)
%m Miesiąc, liczbowo (00..12)
%p AM lub PM
%r Czas, zapis 12-godzinny (hh:mm:ss AM lub PM)
%S Sekundy (00..59)
%s Sekundy (00..59)
%T Czas, zapis 24-godzinny (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 (Sunday..Saturday / niedziela..sobota)
%w Dzień tygodnia (0=niedziela..6=sobota)
%X Rok dla tygodnia, w którym niedziela jest pierwszym dniem tygodnia, liczbowo, cztery cyfry; używany z %V
%x Rok dla tygodnia, w którym poniedziałek jest pierwszym dniem tygodnia, liczbowo, cztery cyfry; używany z %v
%Y Rok, liczbowo, cztery cyfry
%y Rok, liczbowo, dwie cyfry
%% Znak „%”

[/table]

W zależności od wartości zmiennej „lc_time_names” na serwerze nazwy miesięcy oraz dni tygodnia są podawane w zdefiniowanym języku. Możliwe jest jednak dokonanie zmiany wartości zmiennej poprzez zapytanie:

SET lc_time_names = 'pl_PL';

Gdzie oczywiście „pl_PL” to przykładowy zapis dla naszego języka.