如何从字符串中删除空格?

时间:2014-08-22 17:08:06

标签: sql oracle plsql

您好我在oracle中使用字段Org varchar2

创建了一个表
create table new ( org varchar2(10)); 

插入三条记录

insert into new values ('127') ;
insert into new values ('128') ;
insert into new values ('129') ; 

使用参数:127,128,129运行此sql,你将获得127,129但不是128因为128之前有空格,有没有办法可以摆脱这个sql中的空格并获得输出127,128,129。

 SELECT org FROM new WHERE org IN (SELECT REGEXP_SUBSTR (NVL2(:p_org_code,:p_org_code,org),
       '[^,]+',
       1,
       LEVEL)
FROM DUAL
CONNECT BY REGEXP_SUBSTR (NVL2(:p_org_code,:p_org_code,org),
       '[^,]+',
       1,
       LEVEL)
IS NOT NULL)  

4 个答案:

答案 0 :(得分:1)

如果要删除前导空格,请使用ltrim()功能。如果要删除尾随空格,请使用rtrim()函数。如果要删除前导空格和尾随空格,请将它们嵌套:ltrim(rtrim(s))

有人可能会注意到,将这些函数与单个参数一起使用,例如ltrim( some_string_expression ),这些函数会删除前导/尾随空格(0x20,ASCII SP )。

Oracle的PL / SQL有另一种形式:[lr]trim( str_to_trim , str_containing_trim_chars ),其中第二个字符串定义要修剪的字符集。白色空间的“通常”定义是

  • HT,水平标签,(0x09,dec 9)
  • LF,换行,(0x0A,12月10日)
  • VT,垂直制表符,(0x0B,12月11日)
  • FF,换页,(0x0C,12月12日)
  • CR,回车,(0x0D,12月13日)
  • SP,空格(0x20,dec 32)

所以要修剪那些,你会说:

rtrim(ltrim( source_string ,
  chr(9)+chr(10)+char(11)+char(12),+char(13)+char(32) ) ,
  chr(9)+chr(10)+char(11)+char(12),+char(13)+char(32) )

如果要从字符串中删除所有空格,可以使用PL / SQL的translate()函数,类似

translate(
  source_string ,
  chr(9)+chr(10)+char(11)+char(12),+char(13)+char(32) , -- whitespace chars
  ''                                                    -- replacement chars
  )

从源字符串中删除所有空格。

您还可以使用PL / SQL的正则表达式:

  • ^将匹配锚定到字符串的开头
  • $将匹配结束于字符串
  • [:space:]匹配单个空白字符。

您可以删除前导/尾随空格,如下所示:

regex_replace( source, '(^[:space]+)|([:space:]+$)' , '' )

您可以将嵌入的空格序列折叠为单个空格字符,如下所示:

regex_replace( source , '[:space:]+' , ' ' )

最后,您可以通过删除前导/尾随空格并将一个或多个空白字符的所有嵌入序列替换为单个空格字符来“规范化”字符串,如下所示:

ltrim(rtrim(regex_replace( source , '[:space:]+' , ' ' )))

正如他们所说,有不止一种方法可以做到这一点。

答案 1 :(得分:0)

RTRIM(LTRIM('128 '))

输出将是' 128'

答案 2 :(得分:0)

如果您问我们如何摆脱价值周围的空白区域:

with t as (
  select '123    ' id from dual union all
  select '    124' id from dual union all
  select '  125   ' id from dual 
)
select *
  from t
 where trim(id) in (123, 124, 125)

ID
---
123
124
125 

答案 3 :(得分:0)

您可以尝试

SELECT *
  FROM YOUR_TABLE
  WHERE ORG LIKE '%128%';

分享并享受。