В MySQL можете да използвате EXTRACT()
функция за извличане на части от дата. Например можете да извлечете частта за годината, частта за месеца или частта за деня и т.н. Можете също да извлечете части от компонента за време, като минути, секунди, микросекунди и т.н.
Тази статия съдържа примери за демонстрация.
Синтаксис
Синтаксисът е така:
ИЗВЛЕЧВАНЕ (единица ОТ дата)
Където unit
е частта за дата, която искате да извлечете, и date
е стойността на датата, от която да се извлече тази част.
Вижте таблицата в долната част на тази статия за списък с валидни спецификатори на единици.
Пример 1
Ето пример за демонстриране на основното използване на функцията.
ИЗБЕРЕТЕ ЕКСТРАКТ(ГОДИНА ОТ '2019-01-01') КАТО 'Резултат';
Резултат:
+--------+| Резултат |+--------+| 2019 |+--------+
Пример 2 – Още части за дата
Тук извличам различните части от дата от дата.
ЗАДАДЕТЕ @date ='2019-10-03';ИЗБЕРЕТЕ ЕКСТРАКТ(ДЕН ОТ @дата) КАТО 'Ден', ИЗВЪРХВАНЕ (МЕСЦ ОТ @дата) КАТО 'Месец', ИЗВЪРХВАНЕ (ГОДИНА ОТ @дата) КАТО 'Година ';
Резултат:
+------+-------+------+| Ден | Месец | Година |+------+-------+-----+| 3 | 10 | 2019 |+------+-------+------+
Пример 3 – Извличане на времеви части
Тук извличам различни времеви части от дата.
ЗАДАДЕТЕ @date ='2019-10-03 12:35:05.123456';ИЗБЕРЕТЕ ЕКСТРАКТ(ЧАС ОТ @date) КАТО 'Часове', ИЗВЛЕЧВАНЕ (МИНУТА ОТ @date) КАТО 'Минути', ИЗВЛЕЧВАНЕ (ВТОРА ОТ @ дата) КАТО 'Секунди', ИЗВЛЕЧВАНЕ (МИКРОСЕКУНДА ОТ @date) КАТО 'Микросекунди';
Резултат:
+-------+--------+--------+--------------+| Часове | Минути | Секунди | Микросекунди |+-------+--------+--------+--------------+| 12 | 35 | 5 | 123456 |+-------+--------+--------+--------------+
Пример 4 – Комбиниране на спецификатори на единици
Можете също да комбинирате спецификатори на единици, като това:
ЗАДАДЕТЕ @date ='2019-10-03 12:35:05.123456';ИЗБЕРЕТЕ ЕКСТРАКТ(HOUR_MICROSECOND ОТ @date) КАТО 'Резултат';
Резултат:
+--------------+| Резултат |+--------------+| 123505123456 |+--------------+
Този пример връща всичко от частта за часове до частта за микросекунди.
Пример за база данни
Ето пример за извличане на годината и месеца от колона в база данни:
ИЗПОЛЗВАЙТЕ sakila;ИЗБЕРЕТЕ payment_date КАТО 'Дата/Час', EXTRACT(YEAR_MONTH FROM payment_date) КАТО 'Година/Месец'FROM paymentWHERE payment_id =1;
Резултат:
+---------------------+-----------+| Дата/Час | Година/Месец |+---------------------+-----------+| 25.05.2005 11:30:37 | 200505 |+---------------------+-----------+
Текуща дата/час
Тук извличам частта за месеца от дата, генерирана с CURDATE()
функция.
ИЗБЕРЕТЕ CURDATE(), ИЗВЛЕЧВАНЕ(МЕСЕЦ ОТ CURDATE());
Резултат:
+------------+------------------------------+| CURDATE() | ЕКСТРАКТ(МЕСЕЦ ОТ CURDATE()) |+-----------+--------------------------- ----+| 26.06.2018 | 6 |+------------+-------------------------------+предварително>В този пример извличам часовата част от текущата дата и час (които се генерират с
NOW()
функция).ИЗБЕРЕТЕ СЕГА(), ИЗВЛЕЧЕТЕ(ЧАС ОТ СЕГА());Резултат:
+---------------------+----------------------- --+| СЕГА() | ИЗВЛЕЧВАНЕ(ЧАС ОТ СЕГА()) |+---------------------+------------------ --------+| 26.06.2018 09:01:46 | 9 |+---------------------+--------------------- -+Очаквани стойности
Следващата таблица показва валидните стойности на единици и техния очакван формат.
unit Стойност | Очакван expr Формат |
---|---|
МИКРОСЕКУНДА | МИКРОСЕКУНДИ |
ВТОРА | СЕКУНДИ |
МИНУТА | МИНУТИ |
ЧАС | ЧАСА |
ДЕН | ДНИ |
СЕДМИЦА | СЕДМИЦИ |
МЕСЕЦ | МЕСЕЦИ |
Квартал | ЧЕТВЕРТИРИ |
ГОДИНА | ГОДИНИ |
SECOND_MICROSECOND | ‘SECONDS.MICROSECONDS’ |
MINUTE_MICROSECOND | ‘MINUTES:SECONDS.MICROSECONDS’ |
MINUTE_SECOND | „МИНУТИ:СЕКУНДИ“ |
HOUR_MICROSECOND | „ЧАСОВЕ:МИНУТИ:СЕКУНДИ.МИКРОСЕКУНДИ“ |
HOUR_SECOND | „ЧАСОВЕ:МИНУТИ:СЕКУНДИ“ |
HOUR_MINUTE | „ЧАСОВЕ:МИНУТИ“ |
DAY_MICROSECOND | ‘ДНИ ЧАСОВЕ:МИНУТИ:СЕКУНДИ.МИКРОСЕКУНДИ’ |
DAY_SECOND | „ДНИ ЧАСОВЕ:МИНУТИ:СЕКУНДИ“ |
DAY_MINUTE | „ДНИ ЧАСА:МИНУТИ“ |
DAY_HOUR | „ДНИ ЧАСА“ |
YEAR_MONTH | „ГОДИНИ-МЕСЕЦИ“ |