Problém:
Chcete extrahovat čas z hodnoty řetězce v MySQL.
Příklad:
Máte hodnotu řetězce, která vypadá takto:
‘Wednesday, 10 February 2021, 12:30:20’
Chcete extrahovat pouze časovou část „12:30:20“.
Řešení:
Zde je dotaz:
SELECT DATE_FORMAT(STR_TO_DATE("Wednesday, 10 February 2021, 12:30:20", "%W, %d-%m-%Y, %T"), "%T");
Diskuse:
Abychom tento proces jasněji ilustrovali, vysvětlíme jej ve dvou částech.
Nejprve musíme převést řetězec na hodnotu data. K tomu používáme STR_TO_DATE
funkce. Dotaz by měl vypadat takto:
SELECT STR_TO_DATE("Wednesday, 10 February 2021, 12:30:20", "%W, %d-%m-%Y, %T”);
Účel STR_TO_DATE
funkcí je převést textový řetězec do formátu data a času. Syntaxe této funkce je následující:
STR_TO_DATE(string, format);
Prvním argumentem této funkce je řetězec, který chceme převést. Druhý argument určuje formát řetězce. V našem případě používáme následující parametry:
- %W:Název dne v týdnu od neděle do soboty.
- %d:Den v měsíci jako číselná hodnota od 01 do 31.
- %m:Měsíc jako číselná hodnota od 01 do 12.
- %Y:Rok jako čtyřmístná číselná hodnota (yyyy).
- %T:Čas ve 24hodinovém formátu (hh:mm:ss).
Další parametry naleznete v oficiální dokumentaci pro MySQL.
Výsledek tohoto dotazu by měl vypadat takto:
2021-02-10 12:30:20
Nyní máme hodnotu v datovém typu DATETIME. Abychom extrahovali pouze čas, musíme přidat DATE_FORMAT
funkce na dotaz výše.
Obecná syntaxe DATE_FORMAT
funkce je:
DATE_FORMAT(date, format)
Náš dotaz by pak měl vypadat takto:
SELECT DATE_FORMAT(STR_TO_DATE("Wednesday, 10 February 2021, 12:30:20", "%W, %d-%m-%Y, %T"), "%T");
V našem příkladu je prvním argumentem DATE_FORMAT
funkce je datum vyplývající z STR_TO_DATE
funkce. Druhým argumentem je formát, který funguje stejně jako v STR_TO_DATE
funkce. Protože zde potřebujeme pouze čas, zadáme "%T
" jako druhý argument.
Znak % je povinný před znaky specifikátoru formátu. Formát musíme zadat přesně ve stejném pořadí, včetně všech interpunkčních znamének.
Výsledek dotazu, který vidíme níže, je očekávaným výsledkem.
12:30:20
Pomocí kombinace těchto dvou funkcí můžete z textového řetězce extrahovat všechny možné kombinace data a času.