Справка по SQL | страница 20
В приведенном выше примере была использована вторая форма оператора CASE.
Заметим, что для проверки на NULL стандарт предлагает более короткую форму оператора - COALESCE. Этот оператор имеет произвольное число параметров и возвращает значение первого, отличного от NULL. Для двух параметров оператор COALESCE(A, B) эквивалентен следующему оператору CASE:
CASE WHEN A IS NOT NULL THEN A ELSE B END
Решение рассмотренного выше примера при использовании оператора COALESCE можно переписать следующим образом:
>SELECT DISTINCT product.model,
> COALESCE(CAST(price as CHAR(20)),'Нет в наличии') price
> FROM product LEFT JOIN pc c ON product.model=c.model
> WHERE product.type='pc';
Использование первой синтаксической формы оператора CASE можно продемонстрировать на следующем примере: Вывести все имеющиеся модели ПК с указанием цены. Отметить самые дорогие и самые дешевые модели.
>SELECT DISTINCT model, price,
> CASE price WHEN (SELECT MAX(price) FROM pc) THEN 'Самый дорогой'
> WHEN (SELECT MIN(price) FROM pc) THEN 'Самый дешевый'
> ELSE 'Средняя цена' END comment
> FROM pc ORDER BY price;
В результате выполнения запроса получим
model | price | comment |
---|---|---|
1232 | 350 | Самый дешевый |
1260 | 350 | Самый дешевый |
1232 | 400 | Средняя цена |
1233 | 400 | Средняя цена |
1233 | 600 | Средняя цена |
1121 | 850 | Средняя цена |
1233 | 950 | Средняя цена |
1233 | 980 | Самый дорогой |
Функции Transact-SQL для обработки даты/времени
Стандарт SQL-92 специфицирует только функции, возвращающие системную дату/время. Например, функция CURRENT_TIMESTAMP возвращает сразу и дату, и время. Плюс имеются функции возвращающие что-либо одно.
Естественно, в силу такой ограниченности, реализации языка расширяют стандарт за счет добавления функций, облегчающий работу пользователей с данными этого типа. Здесь мы рассмотрим функции обработки даты/времени в T-SQL.
Функция DATEADD
Синтаксис
DATEADD ( datepart , number, date )
Эта функция возвращает значение типа datetime, которое получается добавлением к дате date количества интервалов типа datepart, равного number. Например, мы можем к заданной дате добавить любое число лет, дней, часов, минут и т.д. Допустимые значения аргумента datepart приведены ниже и взяты из BOL.
Datepart | Допустимые сокращения |
---|---|
Year - год |