我有一个表mytable
,其列ngram
是VARCHAR2
。我想只选择那些ngram
不包含任何空格(制表符,空格,EOL等)的行。我应该用下面的<COND>
取代什么?
SELECT ngram FROM mytable WHERE <COND>;
谢谢!
答案 0 :(得分:1)
您可以使用regexp_instr(或regexp_like或其他regexp函数),例如here
where regexp_instr(ngram, '[ '|| CHR(10) || CHR(13) || CHR(9) ||']') = 0
此处管理空白区'[ '
答案 1 :(得分:1)
您可以使用 CHR 和 INSTR 函数您要过滤的字符的ASCII代码,例如,对于特殊字符,您的where子句可以是这样的:
INSTR(ngram,CHR(the ASCI CODE of special char))=0
或条件可以是这样的:
where
and ngram not like '%'||CHR(0)||'%' -- for null
.
.
.
and ngram not like '%'||CHR(31)||'%' -- for unit separator
and ngram not like '%'||CHR(127)||'%'-- for delete
在这里,您可以获取所有代码http://www.theasciicode.com.ar/extended-ascii-code/non-breaking-space-no-break-space-ascii-code-255.html
答案 2 :(得分:1)
这应该匹配ngram,其中不包含空白字符,使用\ s简写为所有空格字符。我只是通过将一个TAB插入到VARCHAR2列中的字符串中进行测试,然后将其排除在外:
where regexp_instr(ngram, '\s') = 0;