Oracle 10g是否符合ANSI SQL-1992的子串函数标准?

4
根据ANSI SQL-1992标准,第132页,这是ANSI子字符串函数的语法:
<character substring function> ::=
    SUBSTRING <left paren> <character value expression> FROM <start position>
    FOR <string length> ] <right paren>

在Oracle 10g模式下,使用SQL Developer进行快速测试:

SELECT SUBSTRING('ASDF' FROM 1 FOR 1) FROM DUAL;

结果为:

ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:
Error at Line: 1 Column: 28

这是否意味着Oracle 10g不符合这个特定的ANSI标准?

我只想使用一个符合ANSI标准的子字符串函数,而不是供应商特定的函数。


是的,我认为它不符合要求。 - Troydm
2个回答

6

Oracle文档中关于SUBSTR函数

但您可以查看http://troels.arvin.dk/db/rdbms/#functions-SUBSTRING

不提供标准的SUBSTRING函数。提供SUBSTR(input,start-pos[,length])(即长度是可选的)。 Oracle提供了许多SUBSTR变体(SUBSTRB、SUBSTRC、SUBSTR2、SUBSTR4,与SUBSTR具有相同的语法),主要用于处理各种非拉丁字符类型。 Oracle不支持使用特殊的SQL样式正则表达式进行字符串提取。 取而代之的是,它有REGEXP_SUBSTR函数,它使用POSIX样式的正则表达式模式匹配来提取字符串。


1
同时也可以查看Oracle符合核心SQL:2003标准。"Oracle针对这些子特性具有同等的功能:""E021-06,SUBSTRING函数:请改用SUBSTR函数。" - Jon Heller
1
Oracle加入SUBSTRING函数有多难呢?我看到它有一个特定的语法(而不是一个普通的函数),但SQL已经充满了这种情况。 - marcus
@marcus 可能只是词法分析器中的小修改。 - Lluis Martinez

-5

尝试这个

SELECT SUBSTRING('ASDF' ,1,1) FROM DUAL;

它可以在任何标准中运行


-1 不回答问题并且是错误的 - Oracle函数应该是SUBSTR。 - Graham
OP希望使用ANSI标准的SQL,而不是供应商专有的锁定SQL。 - lit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接