MySQL STR_TO_DATE()
функцията ви позволява да изградите стойност за дата от различните части на датата.
Когато използвате тази функция, вие предоставяте низ от различните части за дата и втори аргумент, който определя формата, в който е предоставена датата.
Синтаксис
Синтаксисът е така:
STR_TO_DATE(str,format)
Където str
е низът, който съдържа частите за дата, а formatът е низът за форматиране (определя как str
аргументът е форматиран).
Пример 1 – Основна употреба
Ето пример за демонстрация.
SELECT STR_TO_DATE('31,12,1999','%d,%m,%Y');
Резултат:
+----------------------------------------+| STR_TO_DATE('31,12,1999','%d,%m,%Y') |+-------------------------- -----------+| 1999-12-31 |+----------------------------------------+
Пример 2 – Ред на форматиращия низ
Низът за формат трябва да съответства на стойностите, предоставени в низа за дата. Например, не можете да направите следното:
SELECT STR_TO_DATE('31,12,1999','%m,%d,%Y');
Резултат:
+----------------------------------------+| STR_TO_DATE('31,12,1999','%m,%d,%Y') |+-------------------------- -----------+| NULL |+----------------------------------------+
Причината, поради която това не работи, е, че се опитваме да принудим месеца да има стойност от 31, но има само 12 месеца в годината. Така че това би довело до невалидна стойност на датата.
Ето защо ще трябва да внимавате, когато използвате тази функция, особено когато стойността на деня е 12 или по-малко, в противен случай може да се окажете, че стойностите на месеца и деня се разменят, без да забележите това.
Например, така:
SELECT STR_TO_DATE('07,12,1999','%d,%m,%Y'), STR_TO_DATE('07,12,1999','%m,%d,%Y');предварително>Резултат:
+----------------------------------------+------- -------------------------------+| STR_TO_DATE('07,12,1999','%d,%m,%Y') | STR_TO_DATE('07,12,1999','%m,%d,%Y') |+-------------------------- -----------+---------------------------------------------- +| 1999-12-07 | 1999-07-12 |+----------------------------------------+---- ----------------------------------+В този случай не получаваме стойност NULL, както в предишния пример, защото и двете
07
и12
може да бъде ден или месец.Пример 3 – Съвпадение на низа за формат
Дори ако низът за формат е в правилния ред, той също трябва да съвпада с формата на частите за дата, предоставени в първия аргумент.
Така например, не можете да направите това:
SELECT STR_TO_DATE('31 декември 1999 г.','%d,%m,%Y');Резултат:
+---------------------------------------+| STR_TO_DATE('31 декември 1999 г.','%d,%m,%Y') |+---------------------------- ------------+| NULL |+-----------------------------------+В този случай ще трябва да направим нещо подобно:
SELECT STR_TO_DATE('31 декември 1999 г.','%d %M, %Y');Резултат:
+-----------------------------------+| STR_TO_DATE('31 декември 1999 г.','%d %M, %Y') |+---------------------------- ------------+| 1999-12-31 |+-------------------------------------------------+предварително>Пример 4 – Използване на функцията GET_FORMAT()
Можете също да предадете
GET_FORMAT()
функция като втори аргумент.Ето един пример.
SELECT STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'САЩ'));Резултат:
+------------------------------------------------------- ------+| STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'САЩ')) |+------------------------------ ---------------------+| 1999-12-07 |+--------------------------------------------------- ---------+Пример 5 – Стойности за дата и час
Можете също да използвате тази функция, за да върнете стойност за час или дата и час.
Ето пример за използване на стойност за дата и час.
SELECT STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s');Резултат:
+------------------------------------------------------- ----------+| STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s') |+-------------- ------------------------------------------------+| 1999-12-31 09:30:17 |+---------------------------------------------- ------------------+Указатели на низови формати
Следните спецификатори могат да се използват във форматния низ. В допълнение към тях можете също да използвате литерални низове във форматния низ.
Спецификатор | Описание |
---|---|
%a | Съкратено име на делничен ден (Sun ..Sat ) |
%b | Съкратено име на месеца (Jan ..Dec ) |
%c | Месец, числов (0 ..12 ) |
%D | Ден от месеца с английски суфикс (0th , 1st , 2nd , 3rd , …) |
%d | Ден от месеца, цифров (00 ..31 ) |
%e | Ден от месеца, цифров (0 ..31 ) |
%f | Микросекунди (000000 ..999999 ) |
%H | Час (00 ..23 ) |
%h | Час (01 ..12 ) |
%I | Час (01 ..12 ) |
%i | Минути, числови (00 ..59 ) |
%j | Ден от годината (001 ..366 ) |
%k | Час (0 ..23 ) |
%l | Час (1 ..12 ) |
%M | Име на месеца (Jan ..December ) |
%m | Месец, цифров (00 ..12 ) |
%p | AM или PM |
%r | Време, 12 часа (hh:mm:ss последвано от AM или PM ) |
%S | Секунди (00 ..59 ) |
%s | Секунди (00 ..59 ) |
%T | Време, 24 часа (hh:mm:ss ) |
%U | Седмица (00 ..53 ), където неделя е първият ден от седмицата; WEEK() режим 0 |
%u | Седмица (00 ..53 ), където понеделник е първият ден от седмицата; WEEK() режим 1 |
%V | Седмица (01 ..53 ), където неделя е първият ден от седмицата; WEEK() режим 2; използва се с %X |
%v | Седмица (01 ..53 ), където понеделник е първият ден от седмицата; WEEK() режим 3; използва се с %x |
%W | Име на деня от седмицата (Sunday ..Sat ) |
%w | Ден от седмицата (0 =Неделя..6 =събота) |
%X | Година за седмицата, в която неделя е първият ден от седмицата, число, четири цифри; използва се с %V |
%x | Година за седмицата, където понеделник е първият ден от седмицата, число, четири цифри; използва се с %v |
%Y | Година, число, четири цифри |
%y | Година, число (две цифри) |
%% | Литерал % знак |
% | x , за всеки „x ” не е изброено по-горе |