loading..
Русский    English
05:20
листать

Функция REPLACE

Функция

  1. REPLACE(строка1, строка2, строка3)
заменяет в строке1 все вхождения строки2 на строку3. Эта функция, безусловно, полезна в операторах обновления (UPDATE), если нужно изменить (исправить) содержимое столбца. Пусть, например, нужно заменить все пробелы дефисом в названиях кораблей. Тогда можно написать:

  1. UPDATE Ships
  2. SET name = REPLACE(name, ' ', '-')

Примечание:

Этот пример можно выполнить на странице с упражнениями DML, где разрешаются запросы на изменение данных.

Однако эта функцию можно применять и в более нетривиальных случаях. Давайте определим, сколько раз в названии корабля используется буква «a». Идея проста: заменим каждую искомую букву двумя любыми символами, после чего посчитаем разность длин полученной и искомой строки. Итак,

Консоль
Выполнить
  1. SELECT name, LEN(REPLACE(name, 'a', 'aa')) - LEN(name)
  2. FROM Ships;

А если нам нужно определить число вхождений произвольной последовательности символов, скажем, передаваемой в качестве параметра в хранимую процедуру? Примененный выше алгоритм в этом случае следует дополнить делением на число символов в искомой последовательности:

  1. DECLARE @str AS VARCHAR(100)
  2. SET @str='ma'
  3. SELECT name, (LEN(REPLACE(name, @str, @str + @str)) - LEN(name))/LEN(@str) FROM Ships

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

В строке `World Wide Web` 14 символов. Заменим теперь каждый пробел двухсимвольной строкой, и подсчитаем длину до замены и после: 

  1. declare @w char(50) ='World Wide Web'
  2. SELECT len(REPLACE(@w,' ','xx')) after, len(@w) before

after    before
88    14

Мы хотели добавить 2 символа, а получили 88 вместо 16. Дело в том, что тип CHAR является точным типом, а это означает, что длина любой строки этого типа будет иметь указанный размер. Мы задали 50 символов, следовательно, строковое значение будет дополняться концевыми пробелами для выравнивания его до 50 символов, Итого, дополнительно получим (50-14)х2 = 72, и всего 72 + 16 = 88.

Вот если бы мы описали переменную типом VARCHAR(50), но получили желаемый результат:

after    before
16    14

Рекомендуемые упражнения: 86


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