SQL:用chr(10)或chr(13)对列进行LIKE查询

时间:2018-10-01 18:32:29

标签: sql oracle

我正在做

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等的东西。

3 个答案:

答案 0 :(得分:2)

您可以先用空格替换\ n和\ r,然后修剪空格,然后进行比较。那将始终有效并且可能足够快。

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

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

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

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

答案 1 :(得分:2)

惰性解决方案(依赖于正则表达式,这可能会或可能不会影响性能-可能会或可能不会影响)是这样的:

select field1 
from   tablename 
where  regexp_like(field1, 'xyz\s+zrt\s+bla\s+bla\s+trew')

答案 2 :(得分:1)

对于Oracle,您可以使用INSTR(field1, chr(10)) > 0

对于SQL Server,您可以使用field1 LIKE '%' + CHAR(10) + '%'CHARINDEX(CHAR(10), field1) > 0