MariaDB има няколко функции, които ви позволяват да извличате различни части за дата и час от стойности за дата/час. Можете да ги използвате, за да разделите всеки компонент за дата/час в отделна колона, ако е необходимо.
По-долу са изброени четири начина за извличане на часовете, минутите и секундите от времева стойност в MariaDB. Като бонус ще включим и микросекунди.
HOUR()
, MINUTE()
, SECOND()
и MICROSECOND()
Функции
HOUR()
, MINUTE()
и SECOND()
функциите извличат часовете, минутите и секундите съответно от стойността на дата или дата и час.
И ако работите с по-висока точност, можете да използвате MICROSECOND()
функция за връщане на микросекундната част.
Ето пример за използване на тези функции за връщане на всеки компонент от време в неговата собствена колона:
SELECT
HOUR('10:45:30.123456') AS "Hours",
MINUTE('10:45:30.123456') AS "Minutes",
SECOND('10:45:30.123456') AS "Seconds",
MICROSECOND('10:45:30.123456') AS "Microseconds";
Резултат:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
TIME
стойностите могат да бъдат в диапазона '-838:59:59.999999'
до '838:59:59.999999'
.
TIME
стойностите също могат да бъдат отрицателни. В такива случаи върнатите стойности са все още положителни.
Ето отрицателна времева стойност:
SELECT
HOUR('-10:45:30.123456') AS "Hours",
MINUTE('-10:45:30.123456') AS "Minutes",
SECOND('-10:45:30.123456') AS "Seconds",
MICROSECOND('-10:45:30.123456') AS "Microseconds";
Резултат:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
EXTRACT()
Функция
EXTRACT()
функцията ви позволява да извлечете определена единица от стойността за дата/час. Следователно можете да го използвате, за да извлечете часовете, минутите, секундите и микросекундите от стойността на времето.
Пример:
SELECT
EXTRACT(HOUR FROM '10:45:30.123456') AS "Hours",
EXTRACT(MINUTE FROM '10:45:30.123456') AS "Minutes",
EXTRACT(SECOND FROM '10:45:30.123456') AS "Seconds",
EXTRACT(MICROSECOND FROM '10:45:30.123456') AS "Microseconds";
Резултат:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
TIME_FORMAT()
Функция
TIME_FORMAT()
функцията ви позволява да форматирате времева стойност въз основа на низ за форматиране. Форматният низ указва как трябва да се форматира времето.
Следователно можете да използвате тази функция, за да връщате отделно различните времеви части.
Пример:
SELECT
TIME_FORMAT('10:07:30.123456', '%H') AS "Hours",
TIME_FORMAT('10:07:30.123456', '%i') AS "Minutes",
TIME_FORMAT('10:07:30.123456', '%s') AS "Seconds",
TIME_FORMAT('10:07:30.123456', '%f') AS "Microseconds";
Резултат:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
Възможно е също да върнете всички времеви компоненти поотделно, но в една и съща колона.
Ето пример за това, което имам предвид:
SELECT TIME_FORMAT('10:07:30.123456', '%H %i %s %f');
Резултат:
+-----------------------------------------------+ | TIME_FORMAT('10:07:30.123456', '%H %i %s %f') | +-----------------------------------------------+ | 10 07 30 123456 | +-----------------------------------------------+
TIME_FORMAT()
функцията приема подмножество от форматни низове, които могат да се използват с DATE_FORMAT()
функция.
Има няколко възможни спецификатора на формата за часовата част. Спецификаторът на формата, използван по-горе, връща часа с две цифри между 00
и 23
. Вижте MariaDB Format Strings за пълен списък с низове/спецификатори на формат, които могат да се използват с DATE_FORMAT()
. TIME_FORMAT()
функцията приема само спецификатори на формат за часове, минути и секунди/подсекунди. Всеки друг спецификатор на формат води до null
или 0
се връща.
DATE_FORMAT()
Функция
DATE_FORMAT()
функцията ви позволява да форматирате стойност на дата или дата и час въз основа на низ за форматиране. Форматният низ указва как трябва да се форматира датата/часът.
Следователно можем да използваме същите спецификатори на формат, които използвахме с TIME_FORMAT()
функция в предишния пример. Въпреки това, DATE_FORMAT()
не приема TIME
стойност, така че ще трябва да предадем DATETIME
стойност.
SELECT
DATE_FORMAT('2023-01-01 10:07:30.123456', '%H') AS "Hours",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%i') AS "Minutes",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%s') AS "Seconds",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%f') AS "Microseconds";
Резултат:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
Подаване само на TIME
стойност не работи с тази функция:
SELECT
DATE_FORMAT('10:07:30.123456', '%H') AS "Hours",
DATE_FORMAT('10:07:30.123456', '%i') AS "Minutes",
DATE_FORMAT('10:07:30.123456', '%s') AS "Seconds",
DATE_FORMAT('10:07:30.123456', '%f') AS "Microseconds";
Резултат:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | NULL | NULL | NULL | NULL | +-------+---------+---------+--------------+ 1 row in set, 4 warnings (0.003 sec)
Нека видим предупреждението:
SHOW WARNINGS;
Резултат:
+---------+------+---------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------+ | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | +---------+------+---------------------------------------------+