SQL如何防止被like语句屏蔽

Posted

技术标签:

【中文标题】SQL如何防止被like语句屏蔽【英文标题】:SQL how to prevent masking by like statement 【发布时间】:2020-04-29 16:44:28 【问题描述】:

我正在处理 like 语句的屏蔽问题,例如:

   case
   when name like 'PO_UTI_%' then 'UTI' 
   when name like 'PO_UTI_ADR_%' then 'UTI ADDRESS'
   when name like 'PO_OP_%' then 'OP' 
   when name like 'PO_OP_HH_%' then 'OP HH' 
   end newname

新名称 UTI 将屏蔽 UTI ADDRESS 而 OP 将屏蔽 OP HH,我应该如何避免这个屏蔽问题?

谢谢!

【问题讨论】:

【参考方案1】:

你把条件安排得更好:

(case when name like 'PO_UTI_ADR_%' then 'UTI ADDRESS'
      when name like 'PO_UTI_%' then 'UTI' 
      when name like 'PO_OP_HH_%' then 'OP HH' 
      when name like 'PO_OP_%' then 'OP' 
 end) as newname

实际上,按长度排序可能会更好:

(case when name like 'PO_UTI_ADR_%' then 'UTI ADDRESS'
      when name like 'PO_OP_HH_%' then 'OP HH' 
      when name like 'PO_UTI_%' then 'UTI' 
      when name like 'PO_OP_%' then 'OP' 
 end) as newname

这应该可以帮助您确保没有“屏蔽”冲突。

【讨论】:

是否有软件可以按长度对它们进行排名...我正在定义接近 50 个新名称。 您可以将when 语句放在电子表格中并对列进行排序。【参考方案2】:

按这个顺序写case就行了。

  case
   when name like 'PO_UTI_ADR_%' then 'UTI ADDRESS'
   when name like 'PO_UTI_%' then 'UTI'
   when name like 'PO_OP_HH_%' then 'OP HH'  
   when name like 'PO_OP_%' then 'OP' 
   end newname

【讨论】:

以上是关于SQL如何防止被like语句屏蔽的主要内容,如果未能解决你的问题,请参考以下文章

pg数据库like防止sql注入

如何防止网站不被SQL注入攻击

使用 try-with-resources 语句可以完全防止异常屏蔽吗

java爬虫系列第五讲-如何使用代理防止爬虫被屏蔽?

如何防止我的网站被sql注入?支柱

微信小说项目如何防止域名屏蔽