Oracle PL / SQL:如何在SELECT中过滤掉空格?

时间:2014-12-11 14:12:19

标签: select plsql whitespace

我有一个表mytable,其列ngramVARCHAR2。我想只选择那些ngram不包含任何空格(制表符,空格,EOL等)的行。我应该用下面的<COND>取代什么?

SELECT ngram FROM mytable WHERE <COND>;

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用regexp_instr(或regexp_like或其他regexp函数),例如here

  where  regexp_instr(ngram, '[ '|| CHR(10) || CHR(13) || CHR(9) ||']') = 0

此处管理空白区'[ '

  • chr(10)=换行
  • chr(13)=回车
  • chr(9)= tab

答案 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;