КАТЕГОРИИ: Архитектура-(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) |
Функції мовиTRANSACT-SQL
Усі функції SQL Server діляться на: строго детерміновані, детерміновані і недетерміновані. Визначення 7.3. Функція називається строго детермінованою, якщо для деякого набору вхідних значень функція завжди повертає одні і ті ж результати. Для призначених для користувача функцій застосовується менш строге визначення. Визначення 7.4. Призначена для користувача функція називається детермінованою, якщо для деякого набору вхідних значень і стану бази даних, функція завжди повертає одні і ті ж результати. У цьому розумінні функція, яка не є строго детермінованою, може бути детермінованою, якщо звертається до даних. Визначення 7.5. Недетермінована функція може повернути різні результати, якщо її кілька разів підряд викликати з одними і тими ж вхідними значеннями. Наприклад, функція GETDATE() є недетермінованою. SQL Server накладає обмеження на різні класи детермінізму. Таким чином, недетерміновані функції слід використовувати обережно. Для вбудованих функцій поняття "детермінований" і "строго детермінований" означає одне і те ж. Система перевіряє визначення призначених для користувача функцій Transact - SQL і не дозволяє створювати недетерміновані функції. Проте, функції, які звертаються до даних або не прив'язані до схеми, вважаються не строго детермінованими. Визначення функцій середовища CLR містить властивості детермінізму, доступу до даних і доступу до системних даних, але оскільки ці властивості не перевіряються системою, функції завжди вважаються не строго детермінованими. Сфера застосування недетермінованих функцій обмежена. У індексованих представленнях, індексованих обчислюваних стовпцях, матеріалізованих обчислюваних стовпцях і визначеннях призначених для користувача функцій Transact - SQL можна викликати тільки детерміновані функції. Якщо функція не є строго детермінованою, її продуктивність може не підлягати оптимізації. Для збереження коректності деякі кроки реорганізації плану виконання пропускаються. Крім того, кількість, порядок і час між викликами призначених для користувача функцій залежать від реалізації. Окрім постійних недетермінованих функцій RAND і сімейства GETDATE, кількість, порядок і час між викликами залежатимуть від вибраного плану. SQL Server 2008 містить безліч вбудованих функцій, а також підтримує створення визначуваних користувачем функцій. Категорії вбудованих функцій приведені в таблиці 7.9. Таблиця 7.9 - Категорії функцій SQL Server 2008
Усі математичні функції, окрім RAND, є детермінованими. Це означає, що вони повертають одні і ті ж результати кожного разу, коли викликаються з одними і тими ж вхідними значеннями. Функція RAND є детермінованою тільки у тому випадку, якщо заданий параметр початкового значення. Деякі математичні функції приведені в таблиці 7.10. Таблиця 7.10 - Математичні функції
Арифметичні функції, такі як ABS, CEILING, DEGREES, FLOOR, POWER, RADIANS і SIGN, повертають значення того ж типу, що і вхідне значення. Тригонометричні і інші функції, включаючи EXP, LOG, LOG10, SQUARE і SQRT, перетворять вхідні значення в тип float і повертають значення типу float. Приклад 7.17. Наступний код повертає квадратний корінь чисел від 1.00 до 10.00: DECLARE @myvalue float; SET @myvalue = 1.00; WHILE @myvalue < 10.00 BEGIN SELECT SQRT(@myvalue); SET @myvalue = @myvalue + 1 END; GO При цьому повертається наступний набір даних: ------------------------ 1.0 ------------------------ 1.4142135623731 ------------------------ 1.73205080756888 ------------------------ 2.0 ------------------------ 2.23606797749979 ------------------------ 2.44948974278318 ------------------------ 2.64575131106459 ------------------------ 2.82842712474619 ------------------------ 3.0 Приклад 7.18. Застосування функції CEILING з позитивними, негативними і нульовими значеннями: SELECT CEILING($123.45), CEILING($- 123.45), CEILING($0.0) GO При цьому повертається наступний набір даних: --------- --------- ------------------------- 124.00 -123.00 0.00 ((1 row(s) affected) Приклад 7.19. Застосування функції SIGN для повернення значення знаку для чисел від - 1 до 1: DECLARE @value real SET @value = - 1 WHILE @value < 2 BEGIN SELECT SIGN(@value) SET NOCOUNT ON SELECT @value = @value + 1 SET NOCOUNT OFF END SET NOCOUNT OFF GO При цьому повертається наступний набір даних: ((1 row(s) affected)
------------------------ -1.0 ((1 row(s) affected)
------------------------ 0.0 ((1 row(s) affected)
------------------------ 1.0 ((1 row(s) affected) Усі вбудовані строкові функції є детермінованими. Це означає, що вони кожного разу повертають однакове значення для однакового набору вхідних параметрів. Таблиця 7.11 - Сроковые функції
Приклад 7.20. Функції UPPER і RTRIM використовуються для отримання з таблиці Contact прізвищ усіх людей, при цьому усі символи прізвища перетворяться в символи верхнього регістра, відповідний символьний рядок обрізується і виробляється її зчеплення з рядком імені: USE AdventureWorks; GO SELECT UPPER(RTRIM(LastName)) + ', ' + FirstName AS Name FROM Person.Contact ORDER BY LastName; GO
Приклад 7.21. Рядок cde замінюється в рядку abcdefghi рядком xxx: SELECT REPLACE('abcdefghicde ',' cde ',' xxx'); GO При цьому результат виглядає таким чином: ------------ abxxxfghixxx ((1 row(s) affected)
Усі значення системної дати і часу наслідує від операційної системи комп'ютера, на якому працює екземпляр SQL Server. У таблиці 7.12 приведені функції дати і часу.
Таблиця 7.12 - Функції дати і часу
Приклад 7.22. Отримання поточних системної дати і часу: SELECT SYSDATETIME() , SYSDATETIMEOFFSET() , SYSUTCDATETIME() , CURRENT_TIMESTAMP , GETDATE() , GETUTCDATE(); При цьому повертаються наступні значення: SYSDATETIME() - 2009-08-30 13:10:02.0474381; SYSDATETIMEOFFSET() - 2009-08-30 13:10:02.0474381 -07:00; SYSUTCDATETIME() - 2009-08-30 20:10:02.0474381; CURRENT_TIMESTAMP - 2009-08-30 13:10:02.047; GETDATE() - 2009-08-30 13:10:02.047; GETUTCDATE() - 2009-08-30 20:10:02.047.
Приклад 7.23. Отримання поточної системної дати: SELECT CONVERT (date, SYSDATETIME()) , CONVERT (date, SYSDATETIMEOFFSET()) , CONVERT (date, SYSUTCDATETIME()) , CONVERT (date, CURRENT_TIMESTAMP) , CONVERT (date, GETDATE()) , CONVERT (date, GETUTCDATE()); При цьому усі функції повертають: 2009-08-30. Отримання поточного системного часу: SELECT CONVERT (time, SYSDATETIME()) , CONVERT (time, SYSDATETIMEOFFSET()) , CONVERT (time, SYSUTCDATETIME()) , CONVERT (time, CURRENT_TIMESTAMP) , CONVERT (time, GETDATE()) , CONVERT (time, GETUTCDATE()); При цьому повертаються наступні значення: SYSDATETIME() - 13:18:45.3490361 SYSDATETIMEOFFSET() - 13:18:45.3490361 SYSUTCDATETIME() - 20:18:45.3490361 CURRENT_TIMESTAMP - 13:18:45.3470000 GETDATE() - 13:18:45.3470000 GETUTCDATE() - 20:18:45.3470000
Дата добавления: 2014-01-04; Просмотров: 673; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |