加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 如何在非区分大小写的字段上执行精确的字符串匹配

发布时间:2020-12-12 06:54:47 所属栏目:MsSql教程 来源:网络整理
导读:我想找到一个表中的所有行,并匹配一个确切的区分大小写的字符串.不幸的是,我的表具有不区分大小写的排序规则. 执行此操作的最有效方法是什么. 例如. 我希望以下内容不返回任何行: select * from sysobject where name = 'Sysbinobjs' 对于答案,假设@match在
我想找到一个表中的所有行,并匹配一个确切的区分大小写的字符串.不幸的是,我的表具有不区分大小写的排序规则.

执行此操作的最有效方法是什么.

例如.

我希望以下内容不返回任何行:

select * from sysobject where name = 'Sysbinobjs'

对于答案,假设@match在一个变量中:

declare @match varchar(4000) 
set @match = 'sysbinobjs'

编辑

澄清,确保尾随空格被正确处理,我想要一个完全匹配,考虑到尾随空格,所以’Hello’只会匹配’Hello’而不是’Hello’

解决方法

这是一段有效的代码片段,以安全有效的方式执行此操作非常棘手.双重匹配是为了避免表扫描(查看执行计划). varbinary铸造强制长度和大小写匹配.因此,尾随空间得到妥善处理,套管得到妥善处理.

请注意,要比较的类型需要与表中的类型相同才能使varbinary转换工作(例如,sysobject中的名称是nvarchar,因此@match将需要是nvarchar).

declare @match nvarchar(4000) 
set @match = 'sysbinobjs'


select * from sysobjects
where name = @match and
cast(name as varbinary(4000)) = cast(@match as varbinary(4000))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读