在oracle 10g 数据库中,我要将下面语句所得出的字符串截取从第20个字符后面40个字符,用select substr 。

select eventdescribe from (select eventdescribe from ns_event order by id desc) where rownum<=1 order by rownum desc;

用select substr ((select eventdescribe from (select eventdescribe from ns_event order by id desc) where rownum<=1 order by rownum desc),20,40) from dual;
结果报错 ora 00907 missing right parenthesis
请问怎么解决。如若不能还有没别的函数可以实现。
前面的查询语句没有问题,查询结果如图

第1个回答  2011-05-17
select substr((select eventdescribe
from (select eventdescribe
from ns_event
order by id desc) t
where rownum <= 1),20,40) from dual;
是您的ORDER BY ROWNUM DESC造成的,为什么要这么排呢?

可以换一种写法的:select substr(eventdescribe ,20,40)
from (select eventdescribe
from (select eventdescribe
from ns_event
order by id desc) t
where rownum <= 1
order by rownum desc)

前边的查询确实没有问题,可是你把这个作为一个字段,然后SELECT ... FROM DUAL这是有问题的。所以您可以看看,只要去掉您的ORDER BY ROWNUM DESC,这个语句马上就正确了。
或者使用上面我写的两个语句中的一个也可以。
第2个回答  2011-05-17
不是你写错了,而是不够细心
ORA-00907: 缺少右括号
可以去搜下oracle错误大全(一览表)
还有在里面写order by 是不起作用的,你要排序的那个列应该 是找不到的
下载不到可以加Q:270564642(加时请加注:百度)
请采纳
第3个回答  2011-05-17
select substr((select eventdescribe from (select rownum as row_index,eventdescribe from ns_event order by id desc) where row_index <=1),20,40) from dual;
感觉你要的效果应该是这样的!~ 你试试!~ 不对的话告诉我 再给你改改!~

但是我记得substr这样函数里面取得是字段可以,但是不能有order by本回答被提问者采纳

在oracle 10g 数据库中,我要将下面语句所得出的字符串截取从第20个字 ...
order by rownum desc)前边的查询确实没有问题,可是你把这个作为一个字段,然后SELECT ... FROM DUAL这是有问题的。所以您可以看看,只要去掉您的ORDER BY ROWNUM DESC,这个语句马上就正确了。或者使用上面我写的两个语句中的一个也可以。

关于oracle 10g字符串截取的问题,求助!!
SQL> CREATE TABLE test (2 t varchar2(30)3 );表已创建。SQL> SQL> INSERT INTO test 2 VALUES('FastEthernet4\/25');已创建 1 行。SQL> SQL> INSERT INTO test 2 VALUES('GigabitEthernet4\/30');已创建 1 行。SQL> SELECT 2 REGEXP_SUBSTR(t,'[0-9]+\/[0-9]+'...

oracle 11g中怎么将查询指定的数据不在指定的字段方法
oracle 11g中将查询指定的数据不在指定的字段方法:试试not in或者exist关键字。因为两个字段千米你的内容是完全一致的,所以只要从SUPPLIER_SPEC字段的length(item_units)+1位开始截取,截取到最后就可以了,后面的20是为了防止出现特别长的字符串写的,按照你现在给的数据写个5就足够了,我为了以防万一...

oracle中如何截取字符串中,某个字符前的字符串? 例如截取字符串210-1106...
工具:oracle 10g 步骤:1、以截取字符串“210-1106000001”中“-”前的部分为例。2、执行语句为:select substr('210-1106000001',1,instr('210-1106000001','-')-1) from dual;3、结果为:instr函数语法:instr( string1, string2, start_position,nth_appearance )参数含义:substr函数语法:sub...

oracle10g怎么实现listagg功能
方法一:使用WM_CONCAT函数 Oracle 10g中有一个非官方的函数WM_CONCAT,可以实现类似LISTAGG的功能。这个函数可以将某个字段的多个值连接成一个字符串。例如:sqlSELECT WM_CONCAT FROM table_name;这将返回表中column_name字段的所有值连接起来的字符串。但请注意,WM_CONCAT函数并不是Oracle官方支持的...

oracle数据库里面,在下面的select语句中,我需要增加一个条件为只查询3...
好像都不是最新,可能导致数据不是非常准确,可以通过在command下面执行EXEC dbms_stats.gather_table_stats('【空间名称】','【tablename】',cascade=>true);,可以刷新tabs表中的num_rows列,以及最后更新时间 Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4. ......

oracle10g中,如何查询正则表达式匹配指定字符串的匹配个数?_百度知 ...
‘x’ 忽略空格字符。默认情况下,空格字符与自身相匹配。如果为match_param 指定了多个相互矛盾的值,那么Oracle 使用最后一个值。可以用REGEXP_COUNT 来修改本章前面的LENGTH 示例。可以将下面的语法 select (LENGTH('GEORGE') - LENGTH(REPLACE('GEORGE', 'GE', NULL)) ) \/ LENGTH('GE') AS ...

oracle通过SQL获得500mg*20中的"mg"字符串
如果你用的是ORACLE 10G以上,使用正则表达式是最快速简单的方法。获取药品单位的SQL如下:SELECT REGEXP_SUBSTR(YPGG,'[[:alpha:]]+') FROM t_jc_xs;意思是:截取YPGG列的字符串中,连续的由两个以上英文字母(无论大小写)组成的一个子串,在这里就是“MG”,也就是单位。只要保证字符串中,...

Oracle 数据库 10g 使用 impdp导入出错
为COMPATIBLE时,会根据初始化参数COMPATIBLE生成对象元数据;为LATEST时,会根据数据库的实际版本生成对象元数据.version_string用于指定数据库版本字符串.调用EXPDP使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录.因此,使用EXPDP工具时,必须首先建立DIRECTORY对象.并且...

oracle 10g数据库,plsql执行同样的SQL语句,传递的条件值不一致,一个...
这个一般是因为:数据库中,关于2014的数据量很大,系统判断不走索引,使用全表扫描,因为即使走索引,也没有性能上的提升。而2015的数据量比较少,直接使用索引。

相似回答
大家正在搜