Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Форматирование временного интервала




Присвоение значения локальной переменной

 

Помимо ключевого слова default, позволяющего присваивать значение переменной при ее объявлении, допускается присвоение значения переменной по мере работы процедуры или функции. Существуют два способа назначить переменной новое значение:

 

  • оператор set;
  • оператор select…into…from.

 

 

В следующем примере оператор set присваивает переменной var значение 100, а второй оператор set увеличивает значение переменной var на единицу.

 

set var = 100;

set var = var + 1;

 

Далее представлен синтаксис оператора select…into…from, который позволяет сохранять результаты select -запроса без их немедленного вывода и без использования внешних переменных.

 

select id, testdate into x, y from test limit 1;

 

в этом примере id и testdate являются полями таблицы test, а x и y – локальными переменными хранимой процедуры или функции.

 

 

Пусть имеется разница между двумя датами, выраженная в секундах. Необходимо создать функцию FormatSecond(), которая бы форматировала временной интервал и возвращала бы его в виде строки:

 

Х дней Y часов Z минут W секунд

 

В приведенном ниже примере представлено возможное решение задачи. Следует обратить внимание, что при создании хранимой функции параметр second не может предваряться атрибутами in, out, inout.

Как видно из приведенного выше примера, из параметра second последовательно вычитаются дни, часы, минуты, которые заносятся в локальные переменные day, hour, minute соответственно. После чего результат собирается в конечную строку при помощи встроенной функции concat().

 

Функция concat(str1, str2, …) – возвращает строку, созданную путем объединения всех аргументов, количество которых не ограничено.

Пусть имеется таблица catalogs (см. пример ниже), содержащая три столбца:

  • id_catalog – целочисленный столбец, играющий роль первичного ключа таблицы;
  • name – текстовый столбец, содержащий названия элементов каталога;
  • putdate – поле типа datetime, в котором хранится время последнего обновления элемента каталога.

 

 

Ниже приводится пример запроса, позволяющего узнать, сколько времени прошло с момента последней правки каждого из элементов каталога, и вывести это время в соответствии с форматом функции FormatSecond() из приведенного ранее примера.

 

Функция timestampdiff() возвращает разницу между двумя датами в единицах измерения, указанных в первом аргументе. Функция доступна, начиная с версии MySQL 5.0. В более ранних версиях необходимо преобразовать обе даты к формату UNIXSTAMP (количество секунд, прошедших с полуночи 1 января 1970 года) при помощи функции from_unixtime() и вычесть полученные значения друг из друга.

 

Далее представлен более сложный пример – вычисляется разница между правками отдельных элементов каталога, и это достигается при помощи самообъединения таблицы catalogs. Для удобства таблица сортируется по первичному ключу id_catalog, и разница в правке вычисляется для двух соседних позиций.

 

Ряд значений, которые возвращает функция timestampdiff(), оказываются отрицательными, поэтому при помощи функции abs() возвращается абсолютное значение результата.




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 447; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.