sql >> Databáze >  >> RDS >> Mysql

STR_TO_DATE() Příklady – MySQL

MySQL STR_TO_DATE() Funkce vám umožňuje sestavit hodnotu data z různých částí data.

Při použití této funkce zadáte řetězec různých částí data a druhý argument, který specifikuje formát, ve kterém je datum poskytnuto.

Syntaxe

Syntaxe vypadá takto:

STR_TO_DATE(str,formát)

Kde str je řetězec, který obsahuje části data, a formát je formátovací řetězec (určuje, jak bude str argument je naformátován).

Příklad 1 – Základní použití

Zde je příklad k demonstraci.

SELECT STR_TO_DATE('31,12,1999','%d,%m,%Y');

Výsledek:

+--------------------------------------+| STR_TO_DATE('31,12,1999','%d,%m,%Y') |+---------------------------- -----------+| 1999-12-31 |+--------------------------------------+

Příklad 2 – Pořadí formátovacího řetězce

Formátovací řetězec musí odpovídat hodnotám uvedeným v řetězci data. Nemůžete například provést následující:

SELECT STR_TO_DATE('31,12,1999','%m,%d,%Y');

Výsledek:

+--------------------------------------+| STR_TO_DATE('31,12,1999','%m,%d,%Y') |+---------------------------- -----------+| NULL |+--------------------------------------+

Důvod, proč to nefungovalo, je ten, že se snažíme vnutit měsíci, aby měl hodnotu 31, ale rok má pouze 12 měsíců. Výsledkem by byla neplatná hodnota data.

Proto musíte být při používání této funkce opatrní, zvláště když je hodnota dne 12 nebo méně, jinak byste mohli skončit s prohozením hodnot měsíce a dne, aniž byste si toho všimli.

Například takto:

SELECT STR_TO_DATE('07,12,1999','%d,%m,%Y'), STR_TO_DATE('07,12,1999','%m,%d,%Y'); 

Výsledek:

+--------------------------------------+------- -------------------------------+| STR_TO_DATE('07,12,1999','%d,%m,%Y') | STR_TO_DATE('07,12,1999','%m,%d,%Y') |+---------------------------- -----------+-------------------------------------- +| 12. 12. 1999 | 12.07.1999 |+--------------------------------------+----- ----------------------------------+

V tomto případě nezískáme hodnotu NULL jako v předchozím příkladu, protože obě 07 a 12 může to být den nebo měsíc.

Příklad 3 – Porovnání formátovacího řetězce

I když je formátovací řetězec ve správném pořadí, musí také odpovídat formátu částí data uvedených v prvním argumentu.

Takže například nemůžete udělat toto:

SELECT STR_TO_DATE('31. prosince 1999','%d,%m,%Y');

Výsledek:

+----------------------------------------+| STR_TO_DATE('31. prosince 1999','%d,%m,%Y') |+----------------------------- ------------+| NULL |+----------------------------------------+

V tomto případě bychom museli udělat něco takového:

SELECT STR_TO_DATE('31. prosince 1999','%d %M, %Y');

Výsledek:

+-----------------------------------------+| STR_TO_DATE('31. prosince 1999','%d %M, %Y') |+------------------------------ ------------+| 1999-12-31 |+-----------------------------------------+ 

Příklad 4 – Použití funkce GET_FORMAT()

Můžete také předat GET_FORMAT() fungovat jako druhý argument.

Zde je příklad.

SELECT STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA'));

Výsledek:

+---------------------------------------------- ------+| STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA')) |+------------------------------- ----------------------+| 1999-12-07 |+-------------------------------------------- ---------+

Příklad 5 – Hodnoty data a času

Tuto funkci můžete také použít k vrácení hodnoty času nebo data a času.

Zde je příklad použití hodnoty datetime.

SELECT STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s');

Výsledek:

+---------------------------------------------- ----------+| STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s') |+-------------- ------------------------------------------+| 1999-12-31 09:30:17 |+--------------------------------------- ------------------+

Formátování specifikátorů řetězce

Ve formátovacím řetězci lze použít následující specifikátory. Kromě nich můžete ve formátovacím řetězci použít také doslovné řetězce.

Specifikátor Popis
%a Zkrácený název dne v týdnu (Sun ..Sat )
%b Zkrácený název měsíce (Jan ..Dec )
%c Měsíc, numerický (0 ..12 )
%D Den v měsíci s anglickou příponou (0th , 1st , 2nd , 3rd , …)
%d Den v měsíci, číselný údaj (00 ..31 )
%e Den v měsíci, číselný údaj (0 ..31 )
%f Mikrosekundy (000000 ..999999 )
%H Hodina (00 ..23 )
%h Hodina (01 ..12 )
%I Hodina (01 ..12 )
%i Minuty, číselné (00 ..59 )
%j Den v roce (001 ..366 )
%k Hodina (0 ..23 )
%l Hodina (1 ..12 )
%M Název měsíce (January ..Dec )
%m Měsíc, numerický (00 ..12 )
%p AM nebo PM
%r Čas, 12 hodin (hh:mm:ss následuje AM nebo PM )
%S Sekundy (00 ..59 )
%s Sekundy (00 ..59 )
%T Čas, 24 hodin (hh:mm:ss )
%U Týden (00 ..53 ), kde neděle je prvním dnem v týdnu; WEEK() režim 0
%u Týden (00 ..53 ), kde pondělí je první den v týdnu; WEEK() režim 1
%V Týden (01 ..53 ), kde neděle je prvním dnem v týdnu; WEEK() režim 2; používá se s %X
%v Týden (01 ..53 ), kde pondělí je první den v týdnu; WEEK() režim 3; používá se s %x
%W Název dne v týdnu (Sunday ..Saturday )
%w Den v týdnu (0 =Neděle..6 =Sobota)
%X Rok pro týden, kde neděle je prvním dnem v týdnu, číslice, čtyři číslice; používá se s %V
%x Rok pro týden, kde pondělí je první den v týdnu, číselné, čtyři číslice; používá se s %v
%Y Rok, číslice, čtyři číslice
%y Rok, číselný (dvě číslice)
%% Doslovné % postava
%x x , pro jakékoli „x ” není uvedeno výše

  1. Jak dynamicky pivotovat s datem jako sloupcem

  2. Jak vypočítat druhou odmocninu v SQL

  3. Co dělat (nebo nedělat) s hlavními statistikami čekání

  4. Jak zřetězit řetězce řetězcového pole v dotazu PostgreSQL „seskupit podle“?