需要在每个特殊字符上插入一个转义字符。正如你所说,你可以堆叠一堆REPLACE函数:
DECLARE @Prefix VARCHAR(100) = 'My%Prefix_'
DECLARE @Replaced VARCHAR(100) = REPLACE(REPLACE(REPLACE(REPLACE(@Prefix, '%', '\%'), '^', '\^'), '_', '\_'), '[', '\[')
SELECT
Original = @Prefix,
Translated = @Replaced
结果:
Original Translated
My%Prefix_ My\%Prefix\_
然后使用 LIKE 的ESCAPE 子句告诉引擎你的角色是转义指示符:
SELECT *
FROM Logs
WHERE IDString LIKE @Replaced + '[-]%'
ESCAPE '\'
您还可以使用替换创建标量函数:
CREATE FUNCTION dbo.ufnEscapeLikeSpecialCharacters(@Input VARCHAR(100), @EscapeCharacter CHAR)
RETURNS VARCHAR(100)
AS
BEGIN
RETURN REPLACE(REPLACE(REPLACE(REPLACE(@Input, '%', @EscapeCharacter + '%'), '^', @EscapeCharacter + '^'), '_', @EscapeCharacter + '_'), '[', @EscapeCharacter + '[')
END
然后像这样使用它:
DECLARE @Prefix VARCHAR(100) = 'My%Prefix_'
SELECT *
FROM Logs
WHERE IDString LIKE dbo.ufnEscapeLikeSpecialCharacters(@Prefix, '\') + '[-]%'
ESCAPE '\'