Перейти к содержимому

Как в sql заменить одно значение на другое

  • автор:

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) 

Функция 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), то получили желаемый результат:

Как заменить 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 Запрос на изменение данных UPDATEИзменение значений полей в таблице

UPDATE заменит значения текущих полей таблицы на новые значения.
SET устанавливает какие поля изменять и новые значения, которые нужно присвоить этим полям.
WHERE (если необходимо) — условие на изменение определенных записей. Если WHERE не указан, изменены будут все записи.
При указании параметра LOW_PRIORITY, выполнение UPDATE задержится пока другие клиенты читают таблицу.

Пример запроса на изменение всех записей поля «apple» таблицы «fruit» на определенное значение

UPDATE fruit SET apple=5;

Пример запроса с WHERE который изменяет определенную запись:

UPDATE tovar SET price=500 WHERE >При изменении значения поля можно использовать его текущее значение. 
Пример запроса увеличивающего значение поля price в 2 раза:
UPDATE tovar SET price=price*2;

SET в UPDATE вычисляет выражения слева направо.
Пример запроса который удваивает цену (поле price), а потом уменьшает его на 10:

UPDATE tovar SET price=price*2, price=price-10;

Запрос UPDATE возвратит количество полей, которые были изменены в этом запросе.
Использование LIMIT позволит изменять заданное количество записей.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *