0

我在 T-SQL 中有一个用户定义的函数,它在内部使用 CHARINDEX()。我将 @caseSensitivity(bit) 参数作为输入,它应该决定 CHARINDEX() 函数的大小写(排序规则)。有没有办法做到这一点,而无需为每次出现的 CHARINDEX() 创建两个 if 结构?

4

1 回答 1

1

不幸的是,没有办法设置连接级排序规则覆盖,如果这是你的想法(我是)。

但是,如果您只是在寻找一种能够更轻松地控制它的方法,那么您可以将所有 CHARINDEX 查找评估为区分大小写,然后在 @caseSensitive 为零时使用UPPER使其不区分大小写:

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)
于 2014-09-07T16:21:19.177 回答