REPLACE (Transact-SQL)
Заменяет все вхождения указанного строкового значения другим строковым значением.
Синтаксис
REPLACE ( string_expression , string_pattern , string_replacement )
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
string_expression
Строковое выражение, в котором выполняется поиск. string_expression может быть символьного или двоичного типа данных.
string_pattern
Подстрока для поиска. string_pattern может быть символьного или двоичного типа данных. string_pattern не может превышать максимальное число байт, которое может уместиться на странице. Если string_pattern является пустой строкой (»), string_expression возвращается без изменений.
string_replacement
Строка замещения. Аргумент string_replacement может содержать символьные или двоичные данные.
Типы возвращаемых данных
Возвращает значение типа nvarchar, если один из входных аргументов имеет тип данных nvarchar; в противном случае возвращает значение типа varchar.
Возвращает NULL, если какой-либо из аргументов имеет значение NULL.
Если string_expression не относится к типу varchar(max) или nvarchar(max), функция REPLACE усекает возвращаемое значение до 8000 байт. Для возврата значений, превышающих 8000 байт, аргумент string_expression должен быть явно приведен к типу данных с большими значениями.
Замечания
REPLACE производит сравнение, основанное на параметрах сортировки входных данных. Для выполнения сравнения в указанных параметрах сортировки можно воспользоваться функцией COLLATE, чтобы явно указать параметры сортировки для входных данных.
Символ 0x0000 (char(0)) не определен в параметрах сортировки Windows, и его нельзя включать в REPLACE.
Примеры
На следующем примере показано, как строка cde в строке abcdefghicde заменяется на xxx .
SELECT REPLACE('abcdefghicde','cde','xxx'); GO
------------ abxxxfghixxx (1 row(s) affected)
Следующий пример иллюстрирует использование функции COLLATE .
SELECT REPLACE('This is a Test' COLLATE Latin1_General_BIN, 'Test', 'desk' ); GO
------------ This is a desk (1 row(s) affected)
В следующем примере вычисляется количество пробелов в предложении с помощью функции REPLACE . Сначала вычисляется длина предложения с помощью функции LEN . Затем символы ‘ ‘ заменяются символом » с помощью функции REPLACE . После этого снова вычисляется длина предложения. Полученная разность соответствует количеству пробелов в предложении.
DECLARE @STR NVARCHAR(100), @LEN1 INT, @LEN2 INT; SET @STR = N'This is a sentence with spaces in it.'; SET @LEN1 = LEN(@STR); SET @STR = REPLACE(@STR, N' ', N''); SET @LEN2 = LEN(@STR); SELECT N'Number of spaces in the string: ' + CONVERT(NVARCHAR(20), @LEN1 - @LEN2); GO
------------ Number of spaces in the sentence: 7 (1 row(s) affected)
Как заменить null на 0 в sql
Чтобы заменить значение NULL на 0 в SQL, можно использовать функцию COALESCE . Эта функция принимает несколько аргументов и возвращает первый не NULL аргумент. Если все аргументы NULL , функция вернет NULL . Вот пример использования COALESCE для замены значений NULL на 0 :
SELECT COALESCE(column_name, 0) FROM table_name;
В этом запросе column_name — имя столбца, значения которого нужно заменить, а table_name — имя таблицы, в которой находится столбец. Функция COALESCE заменит все значения NULL в столбце на 0 . Если значение столбца не NULL , то функция вернет его без изменений.
Также можно использовать оператор IS NULL для проверки на NULL и замены его на 0 . Вот пример:
SELECT CASE WHEN column_name IS NULL THEN 0 ELSE column_name END FROM table_name;
Этот запрос также заменит значения NULL на 0 . Если значение столбца не NULL , то запрос вернет его без изменений.
Как в sql заменить одно значение на другое
Форумчанин
Регистрация: 23.10.2008
Сообщений: 230
как заменить одно значение в ячейке другим
Есть таблица в ячейке которой может быть либо 0 либо 1
Нужен запрос который вставит в ячейку 1 если там стоит 0. И наоборот.
Форумчанин
Регистрация: 08.07.2010
Сообщений: 679
UPDATE `table` SET `field` = IF (`field` = 1, 0, 1 )
Форумчанин
Регистрация: 23.10.2008
Сообщений: 230
Спасибо
Я бы «плюсанул» но форум не позволяет
| Похожие темы | ||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| работа с диапозоном ip, как проверить одно значение из всех | Зод | Общие вопросы Delphi | 2 | 03.01.2012 21:16 |
| как одно слово заменить не другое? | ilyha93 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 27.12.2011 20:07 |
| Как в ячейке скомбинировать значение по формуле с обычным текстом? | PashaNastya | Microsoft Office Excel | 7 | 30.03.2010 16:59 |
| Как заменить определенное слово в ячейке, на содержимое другой ячейки. | Брысь | Microsoft Office Excel | 2 | 04.03.2010 16:01 |
| Как прочитать значение, которое отображается в ячейке? | viter.alex | Microsoft Office Excel | 4 | 22.01.2009 17:13 |
Функция REPLACE
заменяет в строке1 все вхождения строки2 на строку3 . Эта функция, безусловно, полезна в операторах обновления (UPDATE), если нужно изменить (исправить) содержимое столбца. Пусть, например, нужно заменить все пробелы дефисом в названиях кораблей. Тогда можно написать:
Примечание:
Этот пример можно выполнить на странице с упражнениями DML, где разрешаются запросы на изменение данных.
Однако эту функцию можно применять и в более нетривиальных случаях. Давайте определим, сколько раз в названии корабля используется буква «a». Идея проста: заменим каждую искомую букву двумя любыми символами, после чего посчитаем разность длин полученной и искомой строки. Итак,
Консоль
Выполнить
А если нам нужно определить число вхождений произвольной последовательности символов, скажем, передаваемой в качестве параметра в хранимую процедуру? Примененный выше алгоритм в этом случае следует дополнить делением на число символов в искомой последовательности:
Следует быть весьма осторожным с применением данного метода к нахождению числа пробелов. Помимо того, что функция LEN не учитывает концевые пробелы, результат будет зависеть от типа данных.
В строке `World Wide Web` 14 символов. Заменим теперь каждый пробел двухсимвольной строкой, и подсчитаем длину до замены и после:
Мы хотели добавить 2 символа, а получили 88 вместо 16. Дело в том, что тип CHAR является точным типом, а это означает, что длина любой строки этого типа будет иметь указанный размер. Мы задали 50 символов, следовательно, строковое значение будет дополняться концевыми пробелами для выравнивания его до 50 символов, Итого, дополнительно получим (50-14)х2 = 72, и всего 72 + 16 = 88.
Вот если бы мы описали переменную типом VARCHAR(50), то получили желаемый результат:
