Преобразование двоичных строковых данных
Если при преобразовании данных типа 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 представляет собой любое допустимое логическое выражение.
Читайте также: DML. Изменение данных Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|