我正在做
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等的东西。
答案 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