Скалярні функції

Скалярная функція повертає одне значення Зазвичай скалярні функції використовуються у виразах стовпців інструкції SELECT, в пропозиціях WHERE і коді T-SQL SQL Server містить десятки вбудованих функцій (Рис 82) в цьому розділі будуть описані тільки ті з них, які я вважаю найбільш корисними

Puc 82 Переглянути всі доступні функції SQL Server найкраще у вікні Object Explorer

Продуктивність частково залежить від схеми даних і частково від структури самого запиту При плануванні зберігання даних потрібно враховувати можливі умови where При цьому слід максимально виключати використання функцій в запитах У той час як використання функцій при формуванні обчислюваних рядків може бути і не настільки проблематичним, їх використання в пропозиції where примушує застосовувати їх до кожної з рядків

У SQL Server 2005 можна створювати три типи користувача функцій Більш детально ми поговоримо про це в главі 22

Інформаційні функції

В архітектурі клієнт / сервер корисно знати, ким є конкретний клієнт У цьому сенсі дуже корисними виявляться наступні чотири функції, особливо при зборі інформації для аудиту

■ User_name () Повертає імя поточного клієнта, яким він представився базі даних Коли користувачеві відкрито доступ до базі даних, його імя може відрізнятися від реєстраційного імені входу на сервер

■ Suser_sname () Повертає реєстраційне імя користувача, під яким він увійшов на SQL Server Навіть якщо той був аутентифікований як член однієї з груп користувачів Windows, функція все одно повертає імя його облікового запису Windows

■ Host_name () Повертає імя робочої станції користувача

■ Арр_паше () Повертає імя додатка, підключеного до SQL Server

Розглянемо приклад:

SELECT

USER_NAME() AS User,

SUSER_SNAME() AS Login,

HOST_NAME() AS Workstation,

APP_NAME() AS Application

Результат буде наступним:

User Login                         Workstation Application

dbo                                                                     NOLI\Paul CHA2 NOLI       SQL Query Analyzer

Функції роботи з датою і часом

Бази даних часто працюють з датою і часом, і SQL Server містить для роботи з ними ряд корисних функцій SQL Server зберігає дату і час в одному типі даних

Дві функції Т-SQL повертають поточні дату і час

■ Get Date () Повертає поточні серверні дату і час, округлені до найближчих трьох мілісекунд

■ GetUTCDate () Повертає поточні серверні дату і час, перетворені під час Грінвічського меридіана Що повертається значення округлюється до найближчих трьох мілісекунд Ця функція особливо корисна компаніям, які мають підрозділи в різних часових зонах

Наступні чотири функції витягують певну частину значення з типом даних date time і працюють з ним

Додаткова Детальна інформація про datetime та інших типах даних міститься в гла-інформація ве 17

■ DateNam е {фрагмент, дата) Повертає правильне імя заданого фрагмента значення datetime (фрагменти для функцій datename () І datepart () наведено в табл 82)

SELECT DATENAME (Year, GetDate ()) as Year Результат буде наступним:

Year

2001

У наступному прикладі для містера Франка вводиться дата народження, а потім витягуються правильні назви окремих фрагментів цієї дати за допомогою функції datename ():

UPDATE Guide

SET DateOfBirth = 9/4/58

WHERE lastName = Frank

SELECT LastName,

DATENAME(yy,DateOfBirth) AS [Year],

DATENAME(mm,DateOfBirth) AS [Month],

DATENAME(dd,DateOfBirth) AS [Day],

DATENAME(weekday, DateOfBirth) AS BirthDay FROM dboGuide

WHERE DateOfBirth IS NOT NULL

Результат виконання буде наступним:

LastName Year Month                Day BirthDay

Frank                                                         1958 September 4           Thursday

Таблиця 82 Фрагменти типу даних Datetime, використовувані функціями дати і часу

Фрагмент

Абревіатура

Фрагмент

Абревіатура

Фрагмент

Абревіатура

Рік

УУ УУУУ

День

dd, d

Хвилина

mi, n

Квартал

qq&gt q

Тиждень

wk, ww

Секунда

ss, s

Місяць

mm, m

День тижня

dw

Мілісекунда

ms

День року

dy, d

Година

hh

■ DatePart (фрагмент, дата) Повертає обраний фрагмент значення типу datetime У наступних фрагментах витягуються день року і день тижня у вигляді цілих чисел:

SELECT DATEPART (DayofYear, GetDate ()) AS DayCount Результат буде наступним:

DayCount

321

SELECT DATEPART (dw, GetDate ()) AS DayWeek Результат буде наступним:

DayWeek

7

Найпростіший спосіб отримати тільки дату, обрізавши час, – це використовувати кілька функцій

Select Cast (Char (10) , GetDateO, 101) as DateTime

■ DateAdd {фрагмент, величина, дата_начала) і DateDiff {фрагмент, величина, дата_начала) Виконання додавання і віднімання з даними типу datetime, що часто потрібно в базах даних Функції datedif f () і dateadd () створені спеціально для цих цілей Результат функції datedif f () не виглядає як повноцінний тип date time, так як витягується тільки фрагмент дати

У наступному запиті обчислюється кількість днів, які я одружений на Меліссе: SELECT

DATEDIFF (уу, 1984 / 5/20 , Getdate ()) AS MarriedYears,

DATEDIFF(dd,1984/5/20, Getdate()) AS MarriedDays

Результат буде наступним:

MarriedYears MarriedDays

17                       6390

Наступний запит додає 100 годин до поточної мілісекунді:

SELECT DATEADD(hh,100, GETDATE()) AS [lOOHoursFromNow]

Результат буде наступним: lOOHoursFromNow

2006-11-21 18:42:03507

Наступний приклад заснований на базі даних Family і обчислює вік матері на момент народження кожного з дітей за допомогою функції datedif f ():

USE Family

SELECT PersonFirstName + 1 + PersonLastName AS Mother,

DATEDIFF(yy, PersonDateOfBirth,

ChildDateOfBirth) AS Age,ChildFirstName FROM Person

JOIN Person Child

ON PersonPersonID = ChildMotherlD ORDER By Age DESC

Функція datedif f в цьому запиті повертає різницю в роках між днем ​​народження матері і дітей Так як функція знаходиться у виразі для стовпця, вона обчислюється для кожного рядка в наступному наборі даних:

Mother

Age

FirstName

Audrey Halloway

33

Corwin

Kimberly Kidd

31

Logan

Elizabeth Campbell

31

Alexia

Melanie Campbell

30

Adam

Grace Halloway

30

James

У SQL Server не міститься тип даних тільки для дати, проте багатьом додаткам він потрібен Щоб уникнути непорозумінь обрізайте час і залишайте тільки дату за допомогою тригера Про триггерах мова піде в главі 23

Строкові функції

Як і більшість сучасних мов програмування, Т-SQL містить безліч функцій роботи з рядками

■ substring {рядок, начальная_позіція, довжина) Повертає фрагмент рядка Першим параметром є сама рядок, другий – Номер символу, з якого вирізується фрагмент, третій – довжина вирізуваного фрагмента

Наприклад, результатом інструкції SELECT SUBSTRING (abcdefg, 3, 2) буде подстрока 1 cd.

■ Stuff {рядок, позіція_вставкі, чісло_удаляемих_сімволов, вставляемая_строка) Протилежна за характером функції substring (), функція stuff () вставляє один рядок в іншу при цьому в позиції вставки може бути видалено задану кількість символів вихідного рядка Наприклад, результатом інструкції SELECT STUFF ( abcdefg1 , 3, 2, 123 ) буде рядок abl23efg . У наступному прикладі використані вкладені функції stuff () для форматування номера соціального страхування США:

SELECT STUFF(STUFF(123456789, 4, 0, -), 7, 0, -)

Результат буде наступним:

123-45-6789

Char Index {символ _поіска, рядок, начальная_позіція) Повертає позицію заданого символу в рядку Наприклад, інструкція SELECT CHARINDEX (з 1, Abcdefg, 1) поверне результат 3

Користувацька функція TitleCase (), описувана далі в цьому розділі, використовує функцію Char Index () для виявлення прогалин, які поділяють слова

Patlndex {% Гіаблон%, рядок) Виконує пошук за шаблоном, який може містити в рядку символи макропідстановки У наступному прикладі шукається перше входження в рядок символу з або d:

SELECT PATINDEX(%[cd]%, abdcdefg)

Результатом даного запиту буде число 3

Right {рядок, число) і Left {рядок, число) Повертає крайню праву або ліву частину рядка Наприклад, результатом запиту

SELECT Left(Nielsen,2) AS [Left],

RIGHT(Nielsen,2) AS [Right]

буде

Left Right Ni en

Len {рядок) Функція повертає довжину рядка Наприклад, інструкція SELECT LEN (Supercalifragilisticexpialidocious) AS Len поверне результат Len

34

Rtrim {рядок) і Ltrim {рядок) Ці функції видаляють відповідно пробіли на початку і в кінці рядка Незважаючи на те що це можна не помітити на друкованому аркуші, для ілюстрації роботи функції ми видалимо по три початкових і завершальних пробілу:

SELECT RTRIM( middle earth ) AS [RTrim],

LTRIM( middle earth ) AS [LTrim]

Результат буде наступним:

RTrim          LTrim

middle earth middle earth

Upper {рядок) і Lower {рядок) Перетворює цілий рядок у верхній або нижній регістр Символи нижнього регістру вперше використовувалися в IX столітті для імітації рукописного письма З появою друкарського верстата в XV столітті друкарі вручну встановлювали регістри символів на кожній сторінці Вони зберігали букви в ящиках над друкованої матрицею Вище розташовувалися ящики з великими символами З цієї причини і виникли терміни верхній регістр і нижній регістр А ось як використовувати описувані функції:

Select UPPER(one TWO tHrEe1) as [Uppercase],

LOWER(one TWO tHrEe) as [Lowercase]

Uppercase       Lowercase

ONE TWO THREE one two three

■ Replace {рядок, рядок) Ця функція оперує з рядком в цілому і виробляє в ній заміни При використанні функції replace () в інструкції update можна легко виправити помилки в даних, наприклад видалити зайві символи табуляції або скорегувати шаблони рядків У наступному прикладі видаляються апострофи в стовпці LastName (Прізвище) таблиці Contact бази даних OBXKites:

USE OBXKites

UPDATE Contact

SET LastName = Adam’s

WHERE LastName = Adams

SELECT LastName, REPLACE(LastName, ”1, ‘)

FROM Contact WHERE LastName LIKE UPDATE Contact

SET LastName = REPLACE(LastName, ”’, ‘)

WHERE LastName LIKE %■%

При роботі із строковими константами досить важко вставити лапки в На замітку рядок, не завершивши її або не викликавши синтаксичну помилку У SQL Server ця проблема вирішується за допомогою двох послідовних символів лапок, які потім перетворяться в одну Наприклад, константа Паб про Брайеном буде збережена як Паб Обрайеном

■ pTitleCasе {Джерело, приймач, заміна) У мові Т-SQL відсутня функція, яка перетворює слова в титульний формат (Перша буква кожного слова завжди має верхній регістр, а всі інші – нижній) Наступна користувацька функція здатна впоратися з цим завданням:

CREATE FUNCTION pTitleCase (

@StrIn NVARCHAR(1024))

RETURNS NVARCHAR(1024)

AS

BEGIN

DECLARE

@StrOut NVARCHAR(1024),

@CurrentPosition INT,

@NextSpace INT,

@CurrentWord NVARCHAR(1024),

@StrLen INT,

@LastWord BIT SET @NextSpace = 1 SET @CurrentPosition = 1 SET @StrOut = ‘

SET @StrLen = LEN(@StrIn)

SET @LastWord = 0 WHILE @LastWord = 0 BEGIN

SET @NextSpace =

CHARINDEX( ,@StrIn, @CurrentPosition+ 1)

IF @NextSpace = 0 — no more spaces found BEGIN

SET @NextSpace = @StrLen SET ©LastWord = 1

END

SET @CurrentWord =

UPPER(SUBSTRING(@StrIn, @CurrentPosition, 1))

SET @CurrentWord = @CurrentWord +

LOWER(SUBSTRING(@StrIn, @CurrentPosition+lf @NextSpace – @CurrentPosition))

SET @StrOut = @StrOut +@CurrentWord SET @CurrentPosition = @NextSpace + 1 END

RETURN @StrOut END

Запуск будь користувача функції вимагає включення до її виклик імені власника:

Select dbopTitleCase(one TWO tHrEe1) as [TitleCase]

Результат буде наступним:

TitleCase

One Two Three

Функція pTitleCase не бере до уваги можливість нестандартного поєднання малих і великих літер, як, наприклад, у прізвищах McDonald, VanCamp або de Jonge Навряд чи було б доцільним враховувати весь список таких винятків Можливо, було б кращим рішенням зберігати в оновлюваному списку приставки, що формують нестандартні прізвища (Van, de, Мс і тп) Оновлену функцію ви зможете знайти на сайті wwwisnotnullcom якщо хочете, можете внести в неї додаткові поліпшення

Текст функції pTitleCase можна завантажити з сайту книги за адресою www SQLServerBiblecom

Функції системи Soundex

Система пошуку фонетичних відповідностей Soundex була створена в Америці для задач перепису населення Президент Рузвельт зажадав від Бюро архівів США створити метод каталогізації населення, який врахував б всілякі варіації однакових прізвищ Система Soundex була створена Маргарет Оделл і Робертом Расселом, на що були отримані патенти 1261167 (1918 р) і 1435663 (1922 р) Далі картки перепису населення заповнювалися з використанням цього методу

Метою методу Soundex є така сортування, щоб схоже звучать імена знаходилися поряд, що дуже корисно при роботі з інформацією про контакти в додатках базах даних Наприклад, якщо я дзвоню в банк і диктую своє прізвище Нільсон, то оператор цілком може почути її як Нільсен і занести в такому вигляді в форму бази даних Однак якщо в базі даних використовується система Soundex, то моє прізвище все одно зявиться в списку результатів пошуку

Більш докладно про систему Soundex та її історії ви можете дізнатися на наступних Web-сайтах:

wwwnaragov/genealogy/codinghtml

wwwamberskylinecom/treasuremaps/uscensushtml

http://wwwblueproofcom/soundex

А ось як працює ця система Перша буква імені зберігається у вигляді символу, а наступні три фонетичних звуку зберігаються за наступною схемою:

1 – В, F, Р, V

2 – С, G, J, К, Q, S, X, Z

3 – D, Т

4&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp —L

5 – М, N

6&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp —R

Подвійні літери А, Е, I, О, U, Н, W, Y і деякі прийменники в одному коді Soundex до уваги не приймаються Таким чином, моє прізвище Nilsen в цьому коді приймає вид

‘N425’

Таким чином

1

Буква N зберігається

2

Букви i і е ігноруються

3

Буква 1 кодується цифрою 4

4

Буква s кодується цифрою 2

5

Буква е ігнорується

6

Буква п зберігається під кодом 5

Таким чином, позбувшись від фонетично подібних звуків, прізвища Nielsen, Nelson і Neilson матимуть один і той же код – N425

Дозвольте навести ще низку прикладів кодування прізвищ

■ Brown – В650 (г – 6, п – 5)

■ Jeffers – J162 (ff-1, г – 6, s – 2)

■ Letterman – L365 (tt – 3, г – 6, m – 5)

■&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Nelson —N425 (1 —4, s —2, n —5)

■&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Nicholson — N242 (c — 2,1 — 4, s — 2)

■&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Nichols — N242 (c — 2,1 — 4, s — 2)

Використання функції soundex ()

SQL Server містить дві функції, повязані з системою Soundex: soundex () і difference () Функція soundex (рядок) обчислює код Soundex рядка Наведемо приклад:

SELECT SOUNDEX(Nielsen) AS Nielsen,

SOUNDEX(Nelson) AS NELSON,

SOUNDEX(Neilson) AS NEILSON

Результат цього запиту буде наступним:

Nielsen NELSON NEILSON

N425 N425 N425

Існує ще один, більш досконалий метод кодування Soundex Кен Хен-На замітку дерсон у своїй книзі The Gurus Guide to Transact SQL (Addison-Wesley, 2000) запропонував покращений алгоритм кодування і відповідну процедуру, що зберігається Якщо ви збираєтеся впроваджувати метод Soundex у виробничому середовищі, я б рекомендував скористатися його версією При бажанні ви можете пошукати й інші алгоритми на перерахованих вище Web-сайтах і написати свою збережену процедуру

Існують два способи впровадження пошуку Soundex в базу даних Найпростіший з них полягає у вставці функції soundex () в пропозицію WHERE, наприклад:

USE СНА2

SELECT LastName, FirstName FROM dboCustomer

WHERE SOUNDEX(Nikolsen) = SOUNDEX(LastName)

Результат буде наступним:

LastName  FirstName

Nicholson  Charles

Nickols      Bob

Незважаючи на те що така реалізація має невеликий вплив на схему даних, вона призводить до зниження продуктивності завдяки збільшенню обсягу оброблюваних даних, так як функція soundex () обробляє кожний рядок у базі даних Більш продуктивна варіація передбачає початкову сортування за першою літерою імені та скорочення обсягу пошуку Це дозволяє застосувати функцію soundex () тільки до рядків, обраним індексом

SELECT LastName, FirstName FROM dboCustomer

WHERE SOUNDEX(Nikolsen) = SOUNDEX(LastName)

AND LastName LIKE N%

Перший запит оброблявся 37,5 мілісекунди, в той час як вдосконалений всього 6,5 Думаю, що на більшому обсязі даних різниця буде більш чутливою

Ще один метод реалізації передбачає створення кластеризованого індексу за стовпцем Так як значення Soundex для кожного рядка обчислюється під час запису, функцію soundex () не доведеться викликати в інструкції SELECT при читанні кожного рядка Цей метод я б порекомендував для додатків, які сильно залежать від методу Soundex при пошуку контактів

Саме цей метод продемонстрований в базі даних OBXKites Збережена процедура pContactAddNew обчислює код Soundex для кожного нового контакту і зберігає результат в стовпці SoundexCode У цьому випадку пошук рядків, заснований на збереженому коді, виконується екстремально швидко

Для прикладу спробуємо знайти код Soundex для прізвища Smith

USE OBXKites

SELECT SOUNDEX(Smith)

S530

Дізнавшись код, тепер можна виконати пошук Soundex без виклику самої функції soundex () в інструкції SELECT

SELECT LastName, FirstName, SoundexCode FROM Contact

WHERE SoundexCode = S530

Результат вийде наступним:

LastName                                  FirstName        SoundexCode

Smith    Ulisius                         S530

Smith    Oscar                           S530

Використання функції Dif ference про

Другою функцією роботи з методом Soundex в SQL Server є difference () Вона повертає різницю Soundex між двома рядками у формі числа від 1 до 4, де четвірка відповідає повному збігу коду

USE СНА2

SELECT LastName, DIFFERENCE (Smith, LastName) AS NameSearch FROM Customer

ORDER BY DIFFERENCE (Smyth, LastName) DESC Результат вийде наступним:

LastName                NameSearch

Smythe              4

Spade                3

Zeniod               3

Kennedy            3

Kennedy            3

Quinn                2

Kemper             1

Nicholson         0

Головне достоїнство функції difference () полягає в тому, що вона розширює діапазон пошуку, не враховуючи перших букв, а недолік полягає в тому, що вона обчислює значення двох параметрів, що робить неможливим отримати перевагу в продуктивності від попереднього обчислення і зберігання в таблиці значень Soundex

Функції перетворення даних

У SQL Server перетворення одного типу даних в інший часто виконуються автоматично Багато хто з них неявні або автоматичні Винятки з цього правила наведені в табл 83

Таблиця 83 Винятки в перетвореннях типів даних

З якого типу

У який тип

Проблеми в перетворенні

binary, varbinary

float, real, ntext, text

Перетворення неприпустимо

char, varchar, nchar, nvarchar

binary, varbinary, money, smallmoney, timestamp

Требуется явне преоброваніе

nchar, nvarchar

image

Перетворення неприпустимо

datetime, smalldatetime

decimal, numeric, float, real, bigint, int, smallint, tinyint, money, smallmoney, bit, timestamp

Требуется явне перетворення

datetime, smalldatetime, decimal, numeric, float, real, bigint, int, smallint, tinyint, money, smallmoney, bit

Uniqueidentifier, image, ntext, text

Перетворення неприпустимо

З якого типу

У який тип

Проблеми в перетворенні

decimal, numeric

decimal, numeric

Требуется явна вказівка ​​точності щоб уникнути втрати даних

float, real

timestamp

Перетворення неприпустимо

money, smallmoney

char, varchar, nchar, nvarc7har

Требуется явне перетворення

timestamp

nchar, nvarchar, float, real, uniqueidentif ier, ntext, text, sql_variant

Перетворення неприпустимо

uniqueidentifier

datetime, smalldatetime, decimal, numeric, float, real, bigint, int, smallint, tinyint, money, smallmoney, bit, timestamp, image, ntext

Перетворення неприпустимо

image

char, varchar, nchar, nvarchar, date time, smalldatetime, decimal, numeric, float, real, bigint, int, smallint, tinyint, money, smallmoney, bit, ntext, sql_variant

Перетворення неприпустимо

ntext, text

binary, varbinary, datetime, smalldatetime, decimal, numeric, float, real, bigint, int, smallint, tinyint, money, smallmoney, bit, timestamp,

uniqueidentif ier, image, sql_variant

Перетворення неприпустимо

ntext

char, varchar

Необхідно явне перетворення

text

nchar, nvarchar

Перетворення неприпустимо

sql_variant

timestamp, image, ntext, text

Перетворення неприпустимо

Для явних перетворень використовують функції cast () і convert ()

■ Cast (ісходние_данние AS тип даних) Стандарт ANSI SQL рекомендує явне перетворення одного типу даних в інший Навіть якщо таке перетворення може бути виконане неявно сервером, використання функції cast () гарантує отримання потрібного типу

Функція cast () програмується кілька відмінно від інших Замість поділу двох своїх аргументів комою використовується ключове слово AS, за яким слід потрібний тип даних, наприклад:

SELECT CAST(Away AS NVARCHAR(5)) AS Tom Hanks

Результат запиту буде таким:

Тош Hanks

Away

А ось ще один приклад:

SELECT CAST (123 AS NVARCHAR (15)) AS Int2String і його результат:

Int2String

123

■ Convert {тип_даних, вираз [, стиль]) Ця функція повертає значення, перетворене в інший тип даних з довільним форматуванням Ця функція не передбачена стандартом ANSI SQL Першим її аргументом є бажаний тип даних, застосовуваний до вираження

Аргумент стиль передбачає застосування до результату деякого стилю Всі допустимі стилі наведені в табл 84 Стиль зазвичай застосовується при перетворенні з типу дати-часу в символьний і навпаки Як правило, одно-або двухціфровой стиль передбачає двухціфровой рік, а трехціфровой – чотирицифровий рік Наприклад, стиль 1 увазі наступний формат даних: 01/01/03, в теж час стиль 3 – 01/01/2003 Стилі, відмічені в таблиці зірочкою, є винятком з цього правила

SQL Server також пропонує числові стилі форматування, проте це більше відноситься до інтерфейсу користувача, ніж до самої бази даних

Таблиця 84 Стилі дат функції convert ()

Стиль

Опис

Формат

0/100*

Використовується за замовчуванням

ммм дд рррр гг: міАМ (або РМ)

1/101

США

мм / дд / рр

2/102

ANSI

ггммдд

3/103

Великобританія, Франція

дд / мм / рр

4/104

Німеччина

ддммгг

5/105

Італія

дд-мм-рр

6/106

ДД МММ рр

7/107

МММ дд, рр

8/108

чч: мм: сс

9/109*

Типово + мілісекунди

ммм дд рррр гг: мм: сс: мммАМ (або РМ)

10/110

США

мм-дд-рр

11/111

Японія

рр / мм / дд

12/112

ISO

ГГММДД

13/113

Європейський за замовчуванням + мілісекунди

дд ммм рррр гг: мм: сс: ммм (24 години)

14/114

чч: мм: сс: ммм (24 години)

Стиль

Опис

Формат

20/120*

ODBC канонічний

рррр-мм-дд гг: мм: сс (24години)

20/121*

ODBC канонічний + мілісекунди

рррр-мм-дд гг: мм: сс: ммм (24години)

126

IS08601 для XML

рррр-мм-дд гг: мм: сс (без пробілів)

130

Кувейт

дц ммм рррр гг: мм: сс: мммАМ (або РМ)

131

Кувейт

дд / мм / рр чч: мм: сс: мммАМ (або РМ)

У чистому середовищі клієнт / сервер дані передаються клієнту без форматування – цим займається клієнтську програму залежно від потреб кінцевого користувача Неформатовані дані більш незалежні, ніж відформатовані, так як можуть використовуватися різними додатками

У наступному прикладі проілюстровано використання функції convert ():

SELECT GETDATEO AS RawDate,

CONVERT (NVARCHAR(25), GETDATEO, 100) AS DatelOO,

CONVERT (NVARCHAR (25) , GETDATEO, 1) AS Datel

Результат операції наступний:

RawDate                                                          DatelOO                                                                    Datel

2001-11-17 10:27:27413                          Nov 17 2001 10:27AM 11/17/01

Дві додаткові функції перетворюють дані між текстовим і числовим типами

■ St г (число, довжина, десяткових _знаков) Перетворює число в рядок

SELECT STR(123,5,2) AS [STR]

Результат буде наступним:

Str

123 0

Інформація про середовище сервера

Системні функції повертають інформацію поточної середовищі сервера У цьому розділі ми розглянемо найбільш популярні з них

■ Db_name () Повертає імя поточної бази даних, що й продемонстровано в наступному прикладі:

SELECT GETDATEO AS Date,

DB_NAME() AS Database

Результат виконання інструкції наступний:

Date                                                                                Database

2001-11-15 18:38:50250 CHA2

■ GetUTCDate () Повертає поточний час годинного пояса Грінвічського меридіана Ця функція дуже стане в нагоді в додатках, до яких звертаються з різних часових поясів

■ ServerProperty () Поставляє інформацію про сервер, яка може знадобитися функції serverproperty (властивість), в Зокрема наступну:

• Зі 11 at ion Тип зіставлення

• Edition Редакція сервера: Enterprise, Developer і тп

• InstanceName Імя примірника сервера або NULL, якщо використовується екземпляр за замовчуванням

• ProductVersion Версія SQL Server

• Product Level RTM – для вихідної промислової версії SPn – для пакетів оновлень Вл – для бета-версії

• ServerName Повне імя сервера та екземпляра

У наступному прикладі за допомогою цієї функції ми отримаємо редакцію ядра і рівень продукту (результат отриманий на моєму сервері):

SELECT

SERVERPROPERTY (ServerName) AS ServerName,

SERVERPROPERTY (Edition) AS Edition,

SERVERPROPERTY (ProductLevel) AS ProductLevel

Буде отримано наступний результат:

ServerName Edition                                    ProductLevel

NOLI             Developer Edition SP1

Резюме

У попередньому розділі ми ознайомилися з інструкцією SELECT і порядком виконання запитів У цьому розділі ми розширили сферу дії цієї інструкції, доповнивши її виразами і обчисленнями, які можуть бути вставлені в різні її частини, що значно підвищує гнучкість роботи із запитами У наступних розділах ви дізнаєтеся, як вирази можуть отримувати дані з підзапитів і функцій користувача

Зокрема, в наступному розділі описується, як запит отримує дані з декількох джерел

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*