用户定义函数T-SQL中的CaseSensitivity

时间:2014-09-05 15:27:11

标签: tsql user-defined-functions casing

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

1 个答案:

答案 0 :(得分:1)

不幸的是,有isn't a way to set a connection-level collation override,如果这就是你的想法(我是)。

但是,如果您只是想找到一种方法来更容易地控制它,那么您可以将所有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)