loading..
Русский    English
14:59
листать

Функции REPLICATE и STUFF

Для удвоения числа искомых символов здесь применялась конкатенация — @str+@str. Однако для этой цели можно использовать еще одну функцию — REPLICATE, которая повторяет первый аргумент такое число раз, которое задается вторым аргументом.

  1. SELECT name, (LEN(REPLACE(name, @str, REPLICATE(@str, 2)))
  2. LEN(name))/LEN(@str)
  3. FROM Ships;

То есть мы повторяем дважды подстроку, хранящуюся в переменной @str.

Если же нужно заменить в строке не определенную последовательность символов, а заданное число символов, начиная с некоторой позиции, то проще выбрать функцию STUFF:

  1. STUFF(строка1, стартовая позиция, L , строка2)

Эта функция заменяет подстроку длиной L, которая начинается со стартовой позиции в строке1 на строку2.

Пример 7.2.1

Изменить имя корабля: оставив в его имени 5 первых символов, дописать «_» (нижнее подчеркивание) и год спуска на воду. Если в имени менее 5 символов, дополнить его пробелами.

Можно решать эту задачу с помощью разных функций. Мы же попытаемся это сделать с помощью функции STUFF.

В первом приближении напишем (ограничимся запросом на выборку):

Консоль
Выполнить
  1. SELECT name, STUFF(name, 6, LEN(name), '_'+launched)
  2. FROM Ships;

В качестве третьего аргумента (количества символов для замены) мы используем LEN(name), так как нам нужно заменить все символы до конца строки, поэтому мы берем с запасом — исходное число символов в имени. И все же этот запрос вернет ошибку. Причем дело не в третьем аргументе, а в четвертом, где выполняется конкатенация строковой константы и числового столбца. Ошибка приведения типа. Для преобразования числа к его строковому представлению можно воспользоваться еще одной встроенной функцией — STR.

Параметр L функции STUFF целочисленный; это значит, что он может принимать отрицательные значения и 0. Для отрицательных значений функция STUFF вернет NULL, как и для случая, когда второй параметр превышает длину строки1. Нуль же означает вставку строки2 в строку1, начиная с позиции, заданной вторым параметром.

Пример 7.2.2

Добавить разделитель "-" в строковое представление даты в формате YYYYMMDD

Консоль
Выполнить
  1. SELECT STUFF(STUFF('20121119',5,0,'-'),8,0,'-');


Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INFORMATION_SCHEMA INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker Больше тэгов
Учебник обновлялся
несколько дней назад
обмен с stellar
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.