Ответ 1
Вам нужно удвоить свои одиночные кавычки следующим образом:
REPLACE(@strip, '''', '')
У меня есть эта функция в SQL Server для замены одинарных кавычек.
Но когда я вставляю одну цитату, она выдает ошибку на Replace(@strip,''',''))
:
Create Function [dbo].[fn_stripsingleQuote]
(@strStrip varchar(Max))
returns varchar
as
begin
declare @CleanString varchar(Max)
SET @var=(Replace(@strip,'',''))
return @var
end
Вам нужно удвоить свои одиночные кавычки следующим образом:
REPLACE(@strip, '''', '')
Попробуйте REPLACE(@strip,'''','')
SQL
использует два кавычки для представления одного в строке.
Если вам действительно нужно полностью удалить одиночные кавычки, вы можете сделать это:
Replace(@strip, '''', '')
Однако обычно вы заменяете "на", и это делает SQL Server счастливым при запросах к базе данных. Уловка с любой из встроенных функций SQL (например, replace) заключается в том, что они также требуют от вас удвоить одинарные кавычки.
Таким образом, чтобы заменить "с" в коде, вы должны сделать это:
Replace(@strip, '''', '''''')
Конечно... в некоторых ситуациях вы можете избежать необходимости делать это полностью, если вы используете параметры при запросах к базе данных. Допустим, вы запрашиваете базу данных из приложения .NET, а затем используете класс SqlParameter для подачи параметров SqlCommand для запроса, и все эти операции с одинарными кавычками будут выполняться автоматически. Обычно это предпочтительный метод, так как параметры SQL также помогут предотвратить инъекции SQL.
Похоже, вы пытаетесь дублировать функциональность QUOTENAME. Эта встроенная функция может использоваться для добавления разделителей и правильного исключения разделителей внутри строк и распознает как одиночные кавычки '
, так и двойные "
как разделители, а также скобки [
и ]
.
Вы можете использовать char (39)
insert into my_table values('hi, my name'+char(39)+ tim.')
Попробуйте выполнить одиночную кавычку с одной цитатой:
Replace(@strip, '''', '')
Разметка/замена/изменение одиночных кавычек из пользовательского ввода (входная санитария) должно выполняться до того, как оператор SQL достигнет базы данных.
У меня возникла странная аномалия, которая будет применяться здесь. Используя API Google и получая ответ в формате XML, он не смог преобразовать в тип данных XML из-за одинарных кавычек.
Заменить (@Strip, '' '', '')
не работал, поскольку одиночная цитата была символом ascii 146 вместо 39. Поэтому я использовал:
Заменить (@Strip, char (146), '')
который также работает для обычных одинарных кавычек char (39) и любого другого специального символа.
Помимо необходимости избегать цитаты (используя двойные кавычки), вы также путаете имена переменных: вы используете @var и @strip вместо @CleanString и @strStrip...
Я думаю, что это кратчайший оператор SQL для этого:
CREATE FUNCTION [dbo].[fn_stripsingleQuote] (@strStrip varchar(Max))
RETURNS varchar(Max)
AS
BEGIN
RETURN (Replace(@strStrip ,'''',''))
END
Надеюсь, это поможет!
Если вы избежите одиночной кавычки с другой отдельной цитатой, которая не работает для вас (например, она не для одного из моих последних запросов REPLACE()), вы можете использовать SET QUOTED_IDENTIFIER OFF перед вашим запросом, затем SET QUOTED_IDENTIFIER ON после.
Например
SET QUOTED_IDENTIFIER OFF;
UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");
SET QUOTED_IDENTIFIER OFF;
выберите replace (colname, '' '', '') AS colname FROM. [dbo]. [Db Name]
Попробуйте это:
select replace (colname, char(39)+char(39), '') AS colname FROM .[dbo].[Db Name];
Я достиг желаемого результата. Пример: входное значение → Like '% Pat') '' OR
Want Output --> *Like '%Pat') OR*
с помощью вышеуказанного запроса достигнут желаемый результат.