L_zq335

导航

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条件后面对单引号中的转义符进行了说明,再次执行可以正常排除掉带下划线的行。其他的特殊字符在类型的使用环境中,也是一样的处理方法。

 

posted on 2019-01-05 17:18  L_zq335  阅读(6)  评论(0)    收藏  举报