Чувствительность к регистру в пользовательской функции T-SQL
У меня есть пользовательская функция в T-SQL, которая использует CHARINDEX() внутри. В качестве входных данных я принимаю параметр @caseSensitivity(bit), который должен определять регистр (сопоставление) функции CHARINDEX(). Есть ли способ сделать это без создания двух if-конструкций для каждого вхождения CHARINDEX()?
1 ответ
Решение
К сожалению, нет способа установить переопределение параметров сопоставления на уровне соединения, если вы об этом подумали (как я).
Однако, если вы просто ищете способ облегчить управление этим, то вы можете оценить все запросы CHARINDEX как чувствительные к регистру, а затем использовать UPPER, чтобы сделать его нечувствительным к регистру, когда его значение @caseSensitive равно нулю:
DECLARE @caseSensitivity BIT = 1
DECLARE @input VARCHAR(3) = 'Abc'
DECLARE @inputCheck VARCHAR(3) = 'B'
IF @caseSensitivity = 0
BEGIN
SET @input = UPPER(@input)
SET @inputCheck = UPPER(@input)
END
SELECT CHARINDEX(@inputCheck COLLATE SQL_Latin1_General_CP1_CS_AS, @input COLLATE SQL_Latin1_General_CP1_CS_AS, 0)