用户定义函数 T-SQL 中的大小写敏感性
Posted
技术标签:
【中文标题】用户定义函数 T-SQL 中的大小写敏感性【英文标题】:CaseSensitivity in an user-defined function T-SQL 【发布时间】:2014-09-05 15:27:11 【问题描述】:我在 T-SQL 中有一个用户定义的函数,它在内部使用 CHARINDEX()。我将 @caseSensitivity(bit) 参数作为输入,它应该决定 CHARINDEX() 函数的大小写(排序规则)。有没有办法做到这一点,而无需为每次出现的 CHARINDEX() 生成两个 if 结构?
【问题讨论】:
你能发布一个代码示例吗? 您是否考虑过CASE
而不是IF
。取决于你的逻辑。
@t_m,使用 case 也不会有什么好处,因为它会产生相同数量和质量的代码。
【参考方案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)
【讨论】:
这实际上是一个很好的解决问题的方法。我只是在寻找类似的东西。谢谢!以上是关于用户定义函数 T-SQL 中的大小写敏感性的主要内容,如果未能解决你的问题,请参考以下文章