Sybase SQL Anywhere中如何让IN运算符区分大小写仅删全大写指定词
Sybase SQL Anywhere IN运算符大小写敏感匹配解决方案
根因说明
Sybase SQL Anywhere 默认采用大小写不敏感的排序规则,字符串比较时会自动忽略大小写差异,因此你写的IN语句会同时匹配到全大写和首字母大写的内容。
可行方案
方案1:使用COLLATE子句指定大小写敏感排序
在需要匹配的字段后追加COLLATE子句,指定大小写敏感的排序规则即可实现精准匹配,常用的大小写敏感规则为UCA_CS,UTF-8字符集场景也可使用utf8_bin二进制排序规则。
修改后的语句示例:
CASE WHEN X COLLATE UCA_CS IN ('CONDIMENTS') THEN NULL ELSE X END
该方案对原有逻辑侵入最小,仅作用于当前匹配逻辑,不会影响其他查询。
方案2:二进制类型对比
将字段和匹配值统一转为二进制类型后再做匹配,二进制比较严格按字节值对比,天然区分大小写:
CASE WHEN CAST(X AS BINARY) IN (CAST('CONDIMENTS' AS BINARY)) THEN NULL ELSE X END
如果需要匹配多个全大写值,只需给IN列表内的每个目标值都套上CAST转二进制即可。
方案3(不推荐):修改会话级排序规则
执行以下语句可将当前会话的默认排序规则修改为大小写敏感,后续该会话内所有字符串比较默认区分大小写:
SET OPTION PUBLIC.collation = 'UCA_CS';
该方案会影响会话内所有查询的字符串匹配逻辑,可能引发其他业务逻辑异常,仅建议全会话都需要大小写敏感匹配的场景使用。
内容的提问来源于stack exchange,提问作者chris_mos
相关产品推荐
相关产品推荐

