MySQL STR_TO_DATE()
funkcja pozwala na zbudowanie wartości daty z różnych części daty.
Korzystając z tej funkcji, podajesz ciąg różnych części daty i drugi argument, który określa format, w jakim jest podana data.
Składnia
Składnia wygląda tak:
STR_TO_DATE(str,format)
Gdzie str
jest ciągiem zawierającym części daty, a format jest ciągiem formatu (określa sposób, w jaki str
argument jest sformatowany).
Przykład 1 – Podstawowe użycie
Oto przykład do zademonstrowania.
SELECT STR_TO_DATE('31,12,1999','%d,%m,%Y');
Wynik:
+--------------------------------------+ | STR_TO_DATE('31,12,1999','%d,%m,%Y') | +--------------------------------------+ | 1999-12-31 | +--------------------------------------+
Przykład 2 – Kolejność ciągu formatującego
Ciąg formatu musi być zgodny z wartościami podanymi w ciągu daty. Na przykład nie możesz wykonać następujących czynności:
SELECT STR_TO_DATE('31,12,1999','%m,%d,%Y');
Wynik:
+--------------------------------------+ | STR_TO_DATE('31,12,1999','%m,%d,%Y') | +--------------------------------------+ | NULL | +--------------------------------------+
Powodem, dla którego to nie zadziałało, jest to, że próbujemy zmusić miesiąc do wartości 31, ale w roku jest tylko 12 miesięcy. Spowodowałoby to nieprawidłową wartość daty.
Dlatego musisz być ostrożny podczas korzystania z tej funkcji, zwłaszcza gdy wartość dnia wynosi 12 lub mniej, w przeciwnym razie możesz zamienić się wartościami miesiąca i dnia bez zauważenia tego.
Na przykład tak:
SELECT STR_TO_DATE('07,12,1999','%d,%m,%Y'), STR_TO_DATE('07,12,1999','%m,%d,%Y');
Wynik:
+--------------------------------------+--------------------------------------+ | STR_TO_DATE('07,12,1999','%d,%m,%Y') | STR_TO_DATE('07,12,1999','%m,%d,%Y') | +--------------------------------------+--------------------------------------+ | 1999-12-07 | 1999-07-12 | +--------------------------------------+--------------------------------------+
W tym przypadku nie otrzymamy wartości NULL jak w poprzednim przykładzie, ponieważ oba 07
i 12
może być dzień lub miesiąc.
Przykład 3 – Dopasowywanie ciągu formatującego
Nawet jeśli ciąg formatu jest we właściwej kolejności, musi również odpowiadać formatowi części daty podanych w pierwszym argumencie.
Na przykład nie możesz tego zrobić:
SELECT STR_TO_DATE('31 Dec, 1999','%d,%m,%Y');
Wynik:
+----------------------------------------+ | STR_TO_DATE('31 Dec, 1999','%d,%m,%Y') | +----------------------------------------+ | NULL | +----------------------------------------+
W takim przypadku musielibyśmy zrobić coś takiego:
SELECT STR_TO_DATE('31 Dec, 1999','%d %M, %Y');
Wynik:
+-----------------------------------------+ | STR_TO_DATE('31 Dec, 1999','%d %M, %Y') | +-----------------------------------------+ | 1999-12-31 | +-----------------------------------------+
Przykład 4 – Korzystanie z funkcji GET_FORMAT()
Możesz także przekazać GET_FORMAT()
funkcja jako drugi argument.
Oto przykład.
SELECT STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA'));
Wynik:
+----------------------------------------------------+ | STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA')) | +----------------------------------------------------+ | 1999-12-07 | +----------------------------------------------------+
Przykład 5 – Wartości daty i godziny
Możesz również użyć tej funkcji, aby zwrócić wartość czasu lub daty i godziny.
Oto przykład z użyciem wartości daty i godziny.
SELECT STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s');
Wynik:
+--------------------------------------------------------+ | STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s') | +--------------------------------------------------------+ | 1999-12-31 09:30:17 | +--------------------------------------------------------+
Specyfikatory ciągu formatu
W ciągu formatu można użyć następujących specyfikatorów. Oprócz tego w ciągu formatującym można również użyć ciągów literowych.
Specyfikator | Opis |
---|---|
%a | Skrócona nazwa dnia tygodnia (Sun ..Sat ) |
%b | Skrócona nazwa miesiąca (Jan ..Dec ) |
%c | Miesiąc, numeryczny (0th ..12 ) |
%D | Dzień miesiąca z angielskim sufiksem (0th , 1st , 2nd , 3rd , …) |
%d | Dzień miesiąca, numeryczny (00 ..31 ) |
%e | Dzień miesiąca, numeryczny (0th ..31 ) |
%f | Mikrosekundy (000000 ..999999 ) |
%H | Godzina (00 ..23 ) |
%h | Godzina (01 ..12 ) |
%I | Godzina (01 ..12 ) |
%i | Minuty, numeryczne (00 ..59 ) |
%j | Dzień roku (001 ..366 ) |
%k | Godzina (0th ..23 ) |
%l | Godzina (1 ..12 ) |
%M | Nazwa miesiąca (January ..December ) |
%m | Miesiąc, numerycznie (00 ..12 ) |
%p | AM lub PM |
%r | Czas, 12 godzin (hh:mm:ss po którym następuje AM lub PM ) |
%S | Sekundy (00 ..59 ) |
%s | Sekundy (00 ..59 ) |
%T | Czas, 24 godziny (hh:mm:ss ) |
%U | Tydzień (00 ..53 ), gdzie niedziela jest pierwszym dniem tygodnia; WEEK() tryb 0 |
%u | Tydzień (00 ..53 ), gdzie poniedziałek to pierwszy dzień tygodnia; WEEK() tryb 1 |
%V | Tydzień (01 ..53 ), gdzie niedziela jest pierwszym dniem tygodnia; WEEK() tryb 2; używane z %X |
%v | Tydzień (01 ..53 ), gdzie poniedziałek to pierwszy dzień tygodnia; WEEK() tryb 3; używane z %x |
%W | Nazwa dnia tygodnia (Sunday ..Saturday ) |
%w | Dzień tygodnia (0th =Niedziela...6 =Sobota) |
%X | Rok dla tygodnia, w którym niedziela jest pierwszym dniem tygodnia, liczba, cztery cyfry; używane z %V |
%x | Rok tygodnia, gdzie poniedziałek to pierwszy dzień tygodnia, numeryczny, cztery cyfry; używane z %v |
%Y | Rok, numerycznie, cztery cyfry |
%y | Rok, numeryczny (dwie cyfry) |
%% | Dosłowny % znak |
% | x , dla każdego „x ” nie wymienione powyżej |