【发布时间】:2018-12-03 23:33:14
【问题描述】:
为什么 lette 'm' 在后面的查询中有特殊的作用?我试图创建一个 TRIM 函数,但我坚持下去。或者:当我从对偶表和另一个表中查询时有什么区别。
例如
我创建了一个包含一列和两个值('adam' 和 'apperda')的表
create table x
(col1 varchar2(20));
insert into x values ('adam');
insert into x values ('apperda');
然后我选择 TRIM(TRAILING... ) 和 RTRIM 如下:
select
col1,
trim(trailing 'am' from col1) traling,
rtrim(col1, 'am') rtim
from x;
结果:'ad' 和 'apperd'
COL1 TRALING RTIM
-------------------- -------------------- --------------------
adam ad ad
apperda apperd apperd
我不明白为什么apperd 会出现在结果中......这应该是一条错误消息,不是吗:ORA-30001: trim set should have only one character?
我尝试了另外两个选择:
-
删除了选择的修剪(尾随...)部分。
select col1, trim(trailing 'am' from col1) traling from x; -
从双重中选择
select trim(trailing 'am' from 'apperda'), from dual;
两个查询都给我错误信息:
ORA-30001:修剪集应该只有一个字符
查询中的加号行提供加号信息?或者怎么可能?这不仅仅是一个查询问题,而且似乎两个数据(adam 和 apperda)相互作用:
我用apperda 创建了一个简单的查询,它显示了错误:
select
trim(trailing 'am' from 'apperda') traling,
rtrim('apperda', 'am') rtim
from dual
ORA-30001:修剪集应该只有一个字符
核心示例(2018-07-05)
create table trims
(col varchar2(20));
insert into trims values ('dream');
select
trim(trailing 'am' from col)
rtrim(col, 'am')
from trims;
选择中的第一行应该给出错误 ORA-30001,因为 trim(trailing...) 中有两个字符。但脚本运行:
TRIM(TRAILING'AM'FROMCOL) RTRIM(COL,'AM')
-----------------------------------------------
dre dre
而且:trim(trailin...) 似乎取决于 rtrim(...) - 如果您删除 rtrim(...),错误消息会按原样显示。
select
trim(trailing 'am' from col)
--rtrim(col, 'am')
from trims;
`ORA-30001: trim set should have only one character`
【问题讨论】:
-
有趣。看起来很奇怪的错误。
-
@diaphol - 阅读文档 - [LTRIM](docs.oracle.com/cd/B19306_01/server.102/b14200/functions083.htm TRIM ltrim 谈论字符,trim 谈论 trim_character(single)
-
@SudiptaMondal - 这并不能解释为什么它有时不会出错。
-
哪个版本?您的示例确实在 12.1.0.2 上给了我一个错误。
-
我在 12.2.0.1 中看到了这种行为,但前提是“set”中的第二个字母是“m”(到目前为止,还没有彻底检查),并且只有当存在是要检查的多行;即使使用双联合的两个示例值的内联视图(但只有 1 行它会出错 - 有点像它正在为多行切换引擎盖下的功能,但不确定为什么“m”很重要。)