Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Преобразование двоичных строковых данных




Если при преобразовании данных типа binary или varbinary в символьные после х указано нечетное число значений, SQL Server добавит ноль (0) после х для получения четного числа значений.

Двоичные данные составлены из двухсимвольных групп, где символы принимают значения от 0 до 9 и от A до F (или от a до f). Двоичные строки должны начинаться с 0x. Например, чтобы ввести FF, введите 0xFF. Максимальным значением будет двоичное значение длиной 8 000 байт, каждый из них представляет собой FF. Типы данных binary предназначены не для шестнадцатеричных данных, а для битовых шаблонов. Преобразования и вычисления с использованием шестнадцатеричных чисел, хранящихся в виде двоичных данных, ненадежны.

При указании длины типа данных binary каждые два символа считаются за один. Длина 10 означает, что будут введены 10 двухсимвольных групп.

Пустые двоичные строки представляются в виде 0x и могут храниться в виде двоичных данных.

DECLARE @d binary(5), @number decimal(38)

SET @number = 1234567890

SET @d = Convert(binary(5), @number)

SELECT @d

 

SET @d = 0x26000001D2

SET @number = Convert(decimal(38), @d)

SELECT @number

Блок операторов.

Группировка двух и более команд в единый блок осуществляется с использованием ключевых слов BEGIN и END:

<блок_операторов>::=

BEGIN

{ sql_оператор | блок_операторов }

END

Инструкция BEGIN занимает одну строку; за ней следует блок инструкций. В конце инструкция END также занимает одну строку, указывая на завершение блока.

 

Блоки BEGIN...END могут быть вложенными.

 

Блок инструкций BEGIN и END должен содержать минимум одну инструкцию (оператор).

 

Инструкции BEGIN и END используются, когда:

· в цикл WHILE необходимо включить блок инструкций;

· в элемент функции CASE необходимо включить блок инструкций;

· в предложение IF или ELSE необходимо включить блок инструкций.

В блок инструкций BEGIN и END нельзя помещать команды, изменяющие структуры объектов БД.

Сгруппированные команды воспринимаются интерпретатором SQL как одна команда.

Некоторые команды SQL не должны выполняться вместе с другими командами (речь идет о командах резервного копирования, изменения структуры таблиц, хранимых процедур и им подобных), поэтому их совместное включение в конструкцию BEGIN...END не допускается.

Синтаксис условного оператора:

<условный_оператор>::=

IF лог_выражение

{ sql_оператор | блок_операторов }

[ ELSE

{sql_оператор | блок_операторов } ]

 

Пример:

DECLARE @a INT

DECLARE @str CHAR(30)

SET @a = (SELECT COUNT(*) FROM Authors)

IF @a >10

BEGIN

SET @str = 'Количество авторов больше 10'

SELECT @str

END ELSE

BEGIN

SET @str = 'Количество авторов = ' + str(@a)

SELECT @str

END

 

Результат:

Циклы организуются с помощью следующей конструкции:

<оператор_цикла>::=

WHILE лог_выражение

{ sql_оператор | блок_операторов }

[ BREAK ]

{ sql_оператор | блок_операторов }

[ CONTINUE ]

 

Цикл можно принудительно остановить, если в его теле выполнить команду BREAK.

Если же нужно начать цикл заново, не дожидаясь выполнения всех команд в теле, необходимо выполнить команду CONTINUE.

 

Пример:

DECLARE @a INT

SET @a = 1

WHILE @a <100

BEGIN

PRINT @a -- вывод на экран значения переменной

IF (@a>40) AND (@a<50)

BREAK -- выход и выполнение 1-й команды за циклом

ELSE

SET @a = @a+rand()*10

CONTINUE

END

PRINT @a

Результат:

Пример программы заполнения таблицы датами в заданном диапазоне (от 1 января 2000 года до 1 января 2001):

IF OBJECT_ID('dbo.Nums1', 'U') IS NOT NULL DROP TABLE dbo.Nums1;

CREATE TABLE dbo.Nums1(d datetime PRIMARY KEY)

DECLARE @i AS INT;

SET @i = 1;

WHILE @i <= datediff (day, '20000101', '20010101')

BEGIN

INSERT INTO dbo.Nums1 VALUES(DATEADD(day, @i-1, '20000101'));

SET @i = @i + 1;

END

GO

select * from dbo.Nums1

Результат:

Пример программы подсчета количества вхождения символа d в заданную строку символов:

DECLARE @a INT, @beginind int, @n int, @perem1 varchar(30)

SET @perem1 ='dsdqwddfgerd'

SET @n = 0

WHILE PATINDEX('%d%',@perem1) > 0

BEGIN

SET @beginind = PATINDEX('%d%',@perem1)

SET @perem1 =RIGHT(@perem1, len(@perem1)- @beginind)

SET @n=@n +1

end

PRINT @n

 

Результат: 5

PATINDEX -Выполняет поиск подстроки в строке по указанному шаблону

Выражение CASE

Для замены множества одиночных или вложенных условных операторов используется следующая конструкция CASE.

Выражение CASE имеет два формата:

· простое выражение CASE для определения результата, которое сравнивает выражение с набором простых выражений;

· поисковое выражение CASE для определения результата, которое вычисляет набор логических выражений.

Оба формата поддерживают дополнительный аргумент ELSE.

 

Простое выражение CASE:

CASE input_expression

WHEN when_expression THEN result_expression [...n ]

[ ELSE else_result_expression ]

END

 

Если входное значение и значение для сравнения совпадают, то конструкция возвращает выходное значение. Если же значение входного параметра не найдено ни в одной из строк WHEN...THEN, то тогда будет возвращено значение, указанное после ключевого слова ELSE.

 

Поисковое выражение CASE:

CASE

WHEN Boolean_expression THEN result_expression [... n ]

[ ELSE else_result_expression ]

END

 

Предложение CASE в поисковом формате отличается от CASE в простом формате тем, что в поисковом формате после ключевого слова CASE нет входного выражения, а после ключевых слов WHEN следуют булевы выражения, которые проверяются на значение TRUE или FALSE (а не на равенство).

В поисковом формате предложение CASE проверяет значения булевых выражений и выводит значение результирующего выражения для первого булева выражения, возвращающего значение TRUE. (Выражения проверяются в порядке их следования.)

 

Аргументы:

input_expression - Выражение, полученное при использовании простого формата функции CASE. Аргумент input_expression представляет собой любое допустимое выражение.

WHEN when_expression - Простое выражение, с которым сравнивается аргумент input_expression при использовании простого формата функции CASE. Аргумент when_expression представляет собой любое допустимое выражение. Типы данных аргумента input_expression и каждого из выражений when_expression должны быть одинаковыми или неявно приводимыми друг к другу.

THEN result_expression - Выражение, возвращаемое, если сравнение выражений input_expression и when_expression дает в результате TRUE или выражение Boolean_expression вычисляется в TRUE. Аргумент result expression представляет собой любое допустимое выражение.

ELSE else_result_expression - Это выражение, возвращаемое, если ни одна из операций сравнения не дает в результате TRUE. Если этот аргумент опущен и ни одна из операций сравнения не дает в результате TRUE, функция CASE возвращает NULL. Аргумент else_result_expression представляет собой любое допустимое выражение. Типы данных аргумента else_result_expression и любого из аргументов result_expression должны быть одинаковыми или неявно приводимыми друг к другу.

WHEN Boolean_expression - Это логическое выражение, полученное при использовании поискового формата функции CASE. Аргумент Boolean_expression представляет собой любое допустимое логическое выражение.

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...