Рис. 12.4.
В нижней части окна с кодом появится результат выполнения новой скалярной пользовательской функции: 4 ( рис. 12.4).
Теперь создадим более сложную скалярную пользовательскую функцию, предназначенную для определения последнего дня месяца введенной даты.
Создайте новую скалярную пользовательскую функцию, так как об этом сказано выше. В окне новой пользовательской функции наберите следующий код ( рис. 12.5):
увеличить изображение
Рис. 12.5.
Перейдем к рассмотрению вышеприведенного кода ( рис. 12.5). Код состоит из следующих групп команд:
CREATE FUNCTION [Последний день месяца] - определяет имя создаваемой функции как "Последний день месяца";
@MyDate - определяют параметр процедуры MyDate. Параметру можно присвоить значения дат или времени (Тип данных DateTime);
RETURNS DateTime - показывает, что функция возвращает дату или время (Тип данных DateTime);
DECLARE @Year Int, DECLARE @Month Int, DECLARE @Day Int - объявляются переменные @Year, @Month и @Day для хранения целочисленных значений года, месяца и дня введенной даты (Тип данных Int).
DECLARE @TmpDate VarChar(10) объявляет переменную "TmpDate" для хранения промежуточного значения даты в строке длинной до 10 символов (Тип данных VarChar(10)).
DECLARE @Result DateTime объявляет переменную "Result" для хранения результата - даты последнего дня месяца (Тип данных DateTime).
SET @Year=DatePart(yy, @MyDate), SET @Month=DatePart(mm, @MyDate), SET @Day=DatePart(dd, @MyDate) - определяются части введенной даты и помещаются в переменныне @Year, @Month и @Day. Для определения частей даты используется функция DatePart, имеющая следующий синтаксис: DatePart(<часть даты>, <дата>). Здесь "часть даты" - это закодированная специальными символами определяемая часть даты (yy - год, mm - месяц, dd - день), "дата" - это дата, части которой определяем.
IF @Month=12
BEGIN
SET @Month=1
SET @Year=@Year+1
END
ELSE
BEGIN
SET @Month=@Month+1
END
Вышепреведенный фрагмент кода выполняет следующие действия: Если номер месяца равен 12 то установить номер месяца ( @Month ) равным 1 и увеличить год ( @Year ) на 1, иначе увеличить месяц на 1.
SET @TmpDate=Convert(Varchar, @Month)+'/01/'+Convert(Varchar, @Year), SET @Result=Convert(DateTime, @TmpDate) - переводит числовые значения даты в дату в строковом формате и записывает ее в переменную @TmpDate, затем переводит дату в строковом формате в тип данных даты и времени и помещает ее в переменную @Result. Для конвертации используется функция Convert, имеющая следующий синтаксис:
Convert(<тип данных>, <значение>), здесь "тип данных" это тип данных в который переводится "значение".
SET @Result=DateAdd(dd, -1, @Result) - из даты, хранимой в переменной @Result вычитается 1 день, для этого используется функция DateAdd, имеющая следующий синтаксис:
DateAdd(<часть даты>, <количество периодов>, <дата>) - здесь "часть даты" - это закодированная специальными символами определяемая часть даты (см. функцию DatePart ), "количество периодов" - это количество частей даты прибавляемой к введенной дате (параметр "дата" ).
RETURN @Result - возвращает значение, хранимое в переменной @Result.
Для создания функции, выполним вышеописанный код, как и в случае с предыдущей функцией, нажав кнопку
После появления сообщения "Command(s) completed successfully." закройте окно с кодом.
Проверим работу функции "Последний день месяца" выполнив ее. Создайте новый пустой запрос, затем в окне с пустым запросом наберите команду SELECT dbo.[Последний день месяца] ('12/07/08') и нажмите кнопку
на панели инструментов ( рис. 12.6).
увеличить изображение
Достарыңызбен бөлісу: |