Oracle之trim( )、ltrim( )、rtrim( )三个函数的用法及陷阱

一、去除字符串前后空格(基本用法)

trim(string):去除指定字符串string的左右空格,当然,string中间有空格的时候是不会被去除的

  • HAVING 子句:Wheret和having子句都用来筛选数据,但是where是针对原数据进行筛选,而having子句只是针对汇总后的结果进行
select deptno, job, avg(sal)
from emp
where hiredate >= to_date('1981-05-01','yyyy-mm-dd')
group by deptno,job
having avg(sal) > 1200
order by deptno,job;
--Order by排序:如果order by后跟着多个字段,默认排序是先对第一个字段升序排序,然后再排第二个字段

ltrim(string)、rtrim(string):分别去除指定字符串string左侧和右侧的空格

特殊情况:字符串左右的空格真的可以全部都去掉吗?不见得。如果你的字符串两侧带有全角空格,你就会惊奇的发现,全角空格完全去不掉!包括Java中trim()方法,对于字符串前后的全角空格也是无能为力。

二、去除字符串左右 / 中指定字符(进阶用法)

去除空格仅仅是这三个函数的“默认行为”,事实上,这三个函数还可以接收其他的参数来完成在指定字符串左右 / 中去除字符。

trim( leading | trailing | both string1 FROM string2):从string2中去除左侧 | 右侧 | 左侧两侧(默认是both,即左右侧都去掉)的string1字符,注意,string1只能是单个字符。

SELECT trim(leading ’ ’ from ’ aaa bbb ccc ') leadingtrim FROM dual;

LEADINGTRIM

---------------------

aaa bbb ccc (注意,此时返回的字符串右侧是有空格的)

SELECT trim(trailing ’ ’ from ’ aaa bbb ccc ') trailingtrim FROM dual;

TRAILINGTRIM

---------------------

​ aaa bbb ccc(显然,此时返回的字符串左侧是有空格的)

SELECT trim(both ’ ’ from ’ aaa bbb ccc ') bothtrim FROM dual;

BOTHTRIM

----------------

aaa bbb ccc(返回的字符串两侧的空格都被去掉)

(注意,以上三个示例中,如果都是要完成“去空格”的话,可以简写成 trim( leading | trailing | both FROM string),即省略空格。)

前面介绍的全角空格不能去除的问题,在这里就可以得到解决了,即将string1也写成全角空格,这样,我们就是”从string2这个左右带全角空格的字符串中将左右的全角空格去掉”了。你看,so EZ

—还没看

ltrim(string1,string2),rtrim**(string1,string2):从字符串string1左侧(右侧)开始去除与string2字符集合单个字符**匹配的字符,直到在string1中遇上某个字符,该字符不在string2字符集合中

这段话读起来有点拗口,但是对于真正理解这两个函数的用法至关重要。oracle中的这两个函数中的第二个参数,可以是多个字符组成的“字符集合”,为什么说是“字符集合”而不是“字符串”(虽然严格意义上讲并没有字符集合这个概念),因为在以string2为基础对string1做字符去除的时候,string2并不是作为一个字符串那样的整体来与string1匹配的,而是单个单个字符的匹配。比如string1=‘abccba’,string2=‘abc’,如果string2作为一个整体来匹配,显然不管是用ltrim还是rtrim函数,对string1操作之后返回的结果应该是’cba’,但实际上不是,返回的是一个空串!

SELECT ltrim(‘abccba’,‘abc’) ltrim FROM dual;

LTRIM

--------

(返回的是空串)

SELECT rtrim(‘abccba’,‘abc’) rtrim FROM dual;

RTRIM

--------

(返回的是空串)

而至于“直到在string1中遇上某个字符,该字符不在string2字符集合中”这句话,则是体现ltrim函数和rtrim函数区别的时候。我们在上面两个例子的基础上对string1稍作改动,在string1中加个“x”:

SELECT ltrim(‘abcxcba’,‘abc’) ltrim FROM dual;

LTRIM

--------

xcba(结果并不是只剩一个“x”,而是包括stirng1中“x”以及右侧的字符)

SELECT rtrim(‘abcxcba’,‘abc’) rtrim FROM dual;

RTRIM

--------

abcx(结果并不是只剩一个“x”,而是包括stirng1中“x”以及左侧的字符)

ltrim函数从string1左侧往右读,左侧前三个字符分别在string2中找到了对应的单个字符匹配,所以都被去除掉,读到“x”的时候,没有匹配上,所以从这开始到string1右侧都被保留并返回;相反,rtrim函数从string2右侧往左读,右侧前三个字符分别在string2中找到了对应的单个字符匹配,所以都被去掉,读到“x”的时候,没有匹配上,所以从这开始到string1左侧都被保留并返回。

由此类推,如果string1中左侧(右侧)第一个字符在string2中找不到对应,那么ltrim(rtrim)函数将会把string1字符串完整返回:

SELECT ltrim(’ abcxcba’,‘abc’) ltrim FROM dual;

LTRIM

--------

abcxcba(string2中并没有空格这个字符串,所以string1带着左侧空格完整返回了)

病灶时间:可能有些朋友在使用trim()、ltrim()、rtrim()这三个函数的进阶用法的时候会出现一个问题,即“我明明指定以空格为条件去除原字符串,为什么返回的是一个空串”,可能的原因是错把“空串”当“空格”。“空串”指的是两个单引号之间什么也没有(即 ‘’ ,看起来跟英文输入法里面一个双引号一样),而“空格”指的是两个单引号之间有个空格(即 ’ ',这个看起来就不像英文输入法里面的双引号了)。如果使用的是空串,原字符串会被去的干干净净的!

Oracle之trim( )、ltrim( )、rtrim( )三个函数相关推荐

  1. Oracle之trim,ltrim,rtrim三个函数的用法

    基础用法: 去除指定字符串前后的空格 select trim(' hello caicai ')trim from dual;--当不加别名时,显示字符串右边还是有空格. 2.去除指定字符串左右的空格 ...

  2. [导入]JavaScript常用函数:Trim() LTrim() RTrim()

    //功能:JavaScript的Trim(), Ltrim(), RTrim() 函数 //来源:http://jorkin.reallydo.com/article.asp?id=460 Strin ...

  3. PHP字符串函数之 trim ltrim rtrim chop

    PHP字符串函数之 trim ltrim rtrim chop trim – 去除字符串首尾处的空白字符(或者其他字符) ltrim – 删除字符串开头的空白字符(或其他字符) rtrim – 删除字 ...

  4. C语言的Trim, LTrim, RTrim

    抽空写了个C语言的Trim(), LTrim(), RTrim(),代码如下: #include <iostream> using namespace std; char * LTrim( ...

  5. php之 trim ltrim rtrim 小坑

    trim, ltrim, rtrim , 有第二个参数,可以指定过滤的字符 小坑demo: //ltrim区分左边的 间隔就是右边第一个字符, 这样写没有可读性 $str = "qwerty ...

  6. Oracle之trim( )、ltrim( )、rtrim( )三个函数的用法及陷阱

    最近整理一份oracle常用函数清单的时候发现其经常用来去除字符串空格的三个函数,也就是trim().ltrim().rtrim(),看起来简简单单,其实大有玄机.以下见解来自网络,但内容经由博主撰写 ...

  7. PHP字符串去除首尾指定字符的trim ltrim rtrim函数

    今天,我们看一个比较简单的处理字符串函数,我们都知道在表单提交的过程中,可用户输入的内容不一定就是和你想的一样合法的数据,就比如输入用户名或者邮箱的时候在input框空了几个空格,这样进入数据库中的数 ...

  8. ORACLE字符串截取函数trim(),ltrim(),rtrim()

    1.TRIM([[LEADING||TRAILING||BOTH] c2 FROM] c1). 看起来很复杂,理解起来很简单: (1)如果没有指定任何参数则oracle去除c1头尾空格 例如:SELE ...

  9. substr instr trim ltrim rtrim函数详解

    substr('源字符串',开始位置,截取长度)        substr('This is a test', 6, 2)     would return 'is'        substr(' ...

最新文章

  1. joc杂志影响因子2019_2019年放射学领域SCI主要杂志影响因子汇总
  2. 在网页中画Icon小图标
  3. localhost与127.0.0.1的区别
  4. java播放声音和图片的代码_java怎么将出片处理成老照片?怎么播放声音?
  5. error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or
  6. matlab微分的语句格式,偏微分差分四种格式的matlab程序.doc
  7. SAP CRM呼叫中心end按钮的实现逻辑
  8. 网络知识:视频监控传输带宽与存储容量的计算方法
  9. cassandra使用心得_使用Cassandra和Nutch爬网
  10. H.264中的一些易混淆概念
  11. android.util.Log常用的方法
  12. Android性能优化之UI实战
  13. 24. Magento 创建新闻模块(4)
  14. Acrok MXF Converter for Mac(专业的MXF格式视频转换工具)
  15. Windows设置眼睛保护色
  16. 大数据工程师面临哪些行业机遇与挑战?
  17. 半中括号怎么用公式编辑器打?
  18. 苏宁低调内测“宁互宝”,网络互助成巨头必争之地...
  19. java组件叠加显示,如何让上层的组件一直在上层显示
  20. torch.nn、(二)

热门文章

  1. ICS4U Summative Project: Hangman
  2. 国外版iPad插卡无法使用,显示GigSky,且无法使用,解决方法
  3. 长安大学转计算机专业,关于做好2019级本科生校内转专业工作的通知
  4. Codewarrior中利用PE multilink下载程序debug时不能连接问题
  5. 怎么压缩mp4视频大小,视频压缩不用愁
  6. C#中使用结构体+有参构造函数
  7. 对Strategy与Template Method模式的区别的一些讨论
  8. QCC51XX---ADK Application Framework编程指南
  9. PyQt5设置软件窗口图标与任务栏图标
  10. COMSOL——水杯中的自然对流问题