LIKE中匹配下划线的解决方案
今天在处理一张表里的数据时,发现需要修改的列中,对部分数据不需要进统一变更操作,经过比对发现不需要进行变更操作的数据都包含下划线,查询验证一下
SELECT XN.EMS_NAME,
SUBSTR(XN.EMS_NAME, INSTR(XN.EMS_NAME, 'port=') + 5),
SUBSTR(XN.EMS_NAME, 0, INSTR(XN.EMS_NAME, 'port=') + 4) || '103_' ||
SUBSTR(XN.EMS_NAME, INSTR(XN.EMS_NAME, 'port=') + 5)
FROM T_CXN_PORT XN
WHERE XN.RATE = 2
AND xn.ems_name NOT LIKE '%\_%'
查询结果并未将带下划线的行给排除掉,因为SQL中下划线是一个特殊字符,它的含义是“任意一个字符”,单引号中使用转义符,无法生效。
网上查询了一下,需要使用关键字ESCAPE对转义符进行定义说明,变更的SQL如下:
SELECT XN.EMS_NAME,
SUBSTR(XN.EMS_NAME, INSTR(XN.EMS_NAME, 'port=') + 5),
SUBSTR(XN.EMS_NAME, 0, INSTR(XN.EMS_NAME, 'port=') + 4) || '103_' ||
SUBSTR(XN.EMS_NAME, INSTR(XN.EMS_NAME, 'port=') + 5)
FROM T_CXN_PORT XN
WHERE XN.RATE = 2
AND xn.ems_name NOT LIKE '%\_%' ESCAPE '\'
SQL条件后面对单引号中的转义符进行了说明,再次执行可以正常排除掉带下划线的行。其他的特殊字符在类型的使用环境中,也是一样的处理方法。
浙公网安备 33010602011771号