首页 > 解决方案 > SQL:使用 chr(10) 或 chr(13) 对列进行 LIKE 查询

问题描述

我正在做一个

select field1 
from tablename 
where field1 like '%xyz zrt bla bla trew%'

field1是一个 clob 列,在它们之间'xyz zrt bla bla trew'可能有新行字符,如 chr(10) 或 chr(13)。所以它可能是 'xyz\r\n\rzrt bla bla\n\n trew'

这些正在转换为一个(或多个空格)。因此,单词之间的任何空格都可以是真正的空格,也可以是这些换行符中的一个或多个。

我如何在我的LIKE?

我正在使用 Oracle,但如果可能的话,我想使用适用于 SQL Server 等的东西。

标签: sqloracle

解决方案


您可以先将 \n 和 \r 替换为空格,然后修剪空格,然后进行比较。这总是有效的,而且可能足够快。

但是,为了适当加快搜索过程,您可以将修剪结果存储在指定的列“field1_trim”中。

取决于您的需求 - 将修剪结果存储到临时表中可能就足够了,并且在空间/速度解决方案之间更加平衡。

例如:将以下查询的结果保存到临时表中,然后在其上运行您的查询

select 
  regexp_replace('[[:space:]]+', chr(32)) 
  field1_trim,
  <some unique row id to map to original table>
 from table1;

推荐阅读