• TIMESTAMPDIFF(<Тип периода>,<Дата или дата и время>,<Дата или дата и время>).
Функция TIMESTAMPDIFF() возвращает количество указанных периодов, прошедших между первым и вторым моментом. Первый аргумент может приниматьте же значения, что и первый аргумент функции TIMESTAMPADD(). Если вторая дата предшествует первой, результат будет отрицательным. Например, TIMESTAMPDIFF(WEEK, 2007-12-12 12:30:00, 2007-12-31)возвращает значение 2, и это означает, что 12 декабря и 31 декабря 2007 г. разделяют две недели.
В следующем подразделе мы рассмотрим функции, позволяющие переводить даты из одного формата в другой.
Функции преобразования форматов дат
Для преобразования дат из одного формата в другой вы можете использовать следующие основные функции:
• DATE_FORMAT(\'<Дата или дата и время>\', \'<Формат>\').
Функция DATE_FORMAT() возвращает строку, содержащую дату, преобразованную к указанному формату. Формат может включать следующие основные параметры:
• %a – сокращенное наименование дня недели (Sun, Mon и т. д.). О том, как настроить вывод дат на русском языке («Пнд», «Втр» и т. д.), рассказывалось при описании функции DAYNAME().
• %b – сокращенное наименование месяца (Jan, Feb и т. д.). О том, как настроить вывод дат на русском языке (Янв, Фев и т. д.), говорилось при описании функции DAYNAME().
• %c – номер месяца (0-12).
• %D – число (номер дня в месяце) с английским суффиксом (0th, 1st, 2nd, и т. д.).
• %d – число месяца (00–31).
• %e – число месяца (0-31).
• %H – часы (00–23).
• %h, %I – часы (01–12).
• %i – минуты (0 0–5 9).
• %j – номер дня в году (0 01-3 6 6).
• %k – часы (0-23).
• %l – часы (1-12).
• %M – наименование месяца (January, February и т. д.). О том, как настроить вывод дат на русском языке (Января, Февраля и т. д.), говорилось при описании функции DAYNAME().
• %m – номер месяца (00–12).
• %p – AM (обозначение первой половины суток) или PM (обозначение второй половины суток).
• %r – время в 12-часовом формате (HH:MM:SS AM или PM).
• %S, %s – секунды (0 0–5 9).
• %T – время в 24-часовом формате (HH:MM:SS).
• %U – номер недели в году (0 0-53), первым днем недели считается воскресенье, первая неделя года – целиком находящаяся в этом году, для дней, предшествующих первой неделе, номер недели равен 0.
• %u – номер недели в году (0 0-53), первым днем недели считается понедельник, первая неделя года – та, более трех дней которой находится в этом году, для дней, предшествующих первой неделе, номер недели равен 0.
• %V – номер недели в году (01–53), первым днем недели считается воскресенье, первая неделя года – целиком находящаяся в этом году, для дней, предшествующих первой неделе, номер недели равен номеру последней недели в предыдущем году.
• %v – номер недели в году (01–53), первым днем недели считается понедельник, первая неделя года – та, более трех дней которой находится в этом году, для дней, предшествующих первой неделе, номер недели равен номеру последней недели в предыдущем году.
• %W – наименование дня недели (Sunday, Monday и т. д.). О том, как настроить вывод дат на русском языке (Понедельник, Вторник и т. д.), было сказано при описании функции DAYNAME().
• %w – номер дня недели (0 – воскресенье, 1 – понедельник и т. д.).
• %X – номер года, к которому относится текущая неделя (первым днем недели считается воскресенье, первая неделя года – целиком находящаяся в этом году, неделя, предшествующая первой неделе года, относится к предыдущему году), в формате YYYY.
• %x – номер года, к которому относится текущая неделя (первым днем недели считается понедельник, первая неделя года – та, более трех дней которой находится в этом году, неделя, предшествующая первой неделе года, относится к предыдущему году), в формате YYYY.
• %Y – номер года в формате YYYY.
• %y – номер года в формате YY.
• %% – знак процента.
Например, функция DATE_FORMAT(\'2007-12-12 12:30:00\', %e %M %Y г. %k часов %i минут\') возвращает значение 12 December 2007 г. 12 часов 30 минут или 12 Декабря 2007 г. 12 часов 30 минут, в зависимости от установленного языка вывода дат.
• TIME_FORMAT(\'<Время или дата и время>\', \'<Формат>\').
Функция TIME_FORMAT() возвращает время, преобразованное к указанному формату. Формат может включать те из перечисленных выше параметров, которые предназначены для отображения часов, минут и секунд. Например, функция TIME_FORMAT(\'2007-12-12 12:30:00\', \'%k часов %i минут\') возвращает значение 12 часов 30 минут.
• STR_TO_DATE(\'<Строка>\', \'<Формат>\').
Функция STR_TO_DATE() получает в качестве аргумента строку, содержащую дату и/или время, и строку формата, и возвращает дату и/или время, полученные из строки в соответствии с указанным форматом. Функции STR_TO_DATE() и DATE_FORMAT() взаимно обратны: если дата была преобразована в строку некоторого формата с помощью функции DATE_FORMAT(), то с помощью функции STR_TO_DATE(), указав тот же формат, можно получить исходную дату, и наоборот. Например, STR_TO_DATE(\'12 December 2007 г. 12 часов 30 минут\',\'%e %M %Y г. %k часов %i минут\') = STR_TO_DATE(DATE_FORMAT(\'2007-12-12 12:30:00\',\'%e %M %Y г. %k часов %i минут\'), \'%e %M %Y г. %k часов %i минут\') = 2007-12-12 12:30:00. Однако названия месяцев и дней недели на русском языке функция STR_TO_DATE() обрабатывает некорректно.
• GET_FORMAT(
Функция GET_FORMAT() возвращает строку формата даты и/или времени, которую затем можно использовать в функции DATE_FORMAT(). Первый аргумент функции указывает, какой формат нужно получить: формат даты, времени или даты и времени. Второй аргумент задает стандарт, которому соответствует возвращаемый формат. Например, функция GET_FORMAT(DATETIME,\'EUR\') возвращает значение %Y-%m-%d %H.%i.%s».
• MAKEDATE(<Номер года>,<Номер дня в году>).
Функция MAKEDATE() получает в качестве аргументов номер года и номер дня в году и возвращает дату, соответствующую этому году и дню. Например, функция MAKEDATE(2007,346) возвращает значение 2007-12-12.
• MAKETIME(<Часы>,<Минуты>,<Секунды>).
Функция MAKETIME() получает в качестве аргументов час, минуту и секунду и возвращает соответствующее время. Например, функция MAKETIME(12,30,0) возвращает значение 12:30:00.
• FROM_DAYS(<Количество дней>).
Функция FROM_DAYS() получает в качестве аргумента количество дней от Р. Х. и возвращает дату, соответствующую этому дню. Например, функция FROM_DAYS(733387) возвращает значение 2007-12-12.
• TO_DAYS(<Дата или дата и время>).
Функция TO_DAYS() получает в качестве аргумента дату или дату и время и возвращает количество дней от Р. Х., соответствующее этой дате. Например, функция TO_DAYS(\'2007-12-12 12:30:00\') возвращает значение 733387.
• SEC_TO_TIME(<Количество секунд>).
Функция SEC_TO_TIME() получает в качестве аргумента количество секунд и возвращает соответствующее количество часов, минут и секунд в формате времени. Например, функция SEC_TO_TIME(45000) возвращает значение 12:30:00.
• TIME_TO_SEC(<Время или дата и время>).
Функция TIME_TO_SEC() получает в качестве аргумента время или дату и время и возвращает количество секунд, соответствующее времени (дата при этом игнорируется). Например, функция TIME_TO_SEC(\'2007-12-12 12:30:00\') возвращает значение 45 000.
• FROM_UNIXTIME(
Функция FROM_UNIXTIME() получает в качестве аргумента Unix-время – количество секунд, прошедших с 1 января 1970 г., и возвращает соответствующую дату и время. Например, функция FROM_UNIXTIME(1197451800) возвращает значение 2007-12-12 12:30:00. При необходимости вы можете задать формат возвращаемой даты и/или времени, используя параметры, которые мы перечислили при описании функции DATE_FORMAT().
• UNIX_TIMESTAMP(<Дата>).
Если аргумент функции UNIX_TIMESTAMP() не задан, то она возвращает текущее Unix-время. Если задан аргумент – дата, дата и время либо число в формате YYYYMMDD, YYMMDD, YYYYMMDDHHMMSS или YYMMDDHHMMSS, то функция UNIX_TIMESTAMP() возвращает Unix-время, соответствующее указанной дате. Например, функция UNIX_TIMESTAMP(20071212123000) возвращает значение 1197451800.
• TIMESTAMP(\'<Дата или дата время>\').
Если задан только один аргумент функции TIMESTAMP(), то она возвращает этот аргумент, преобразованный в формат даты и времени. Например, TIMESTAMP(\'2007-12-12\') возвращает значение 2007-12-12 00:00:00.
Итак, вы изучили функции, выполняющие операции с датами и временем. В следующем разделе мы рассмотрим некоторые функции, работающие с символьными значениями.
3.5. Символьные функции
Рассмотрим символьные функции, которые вы можете использовать в выражениях.
• BIT_LENGTH(\'<Строка>\').
Функция BIT_LENGTH() возвращает длину строки в битах. Например, функция BIT_LENGTH(\'Крылов\') возвращает значение 48 при использовании однобайтовой кодировки и значение 96 при использовании кодировки UTF-8.
• CHAR_LENGTH(\'<Строка>\'), CHARACTER_LENGTH(\'<Строка>\').
Возвращают количество символов в строке. Например, функция CHAR_LENGTH(\'Крылов\') возвращает значение 6.
• LENGTH(\'<Строка>\'), OCTET_LENGTH(\'<Строка>\').
Возвращают длину строки (в байтах). Например, функция LENGTH(\'Крылов\') возвращает значение 6 при использовании однобайтовой кодировки и значение 12 при использовании кодировки UTF-8.
• CHAR(<Код 1>,<Код 2>,…,<Код N> [USING <Кодировка>]).
Функция CHAR() получает в качестве аргументов коды символов и возвращает строку, состоящую из этих символов. При необходимости можно явно указать кодировку, сопоставляющую коды символам. Например, функции CHAR(53402,53632,53643,53435,53438,53426 USING utf8) и CHAR(138,224,235,171,174,162 USING cp866) возвращают значение Крылов.
• ORD(\'