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



根据ANSI SQL-1992标准第132页,这是ANSI子字符串函数的语法:

<character substring function> ::=
    SUBSTRING <left paren> <character value expression> FROM <start position>
    FOR <string length> ] <right paren>

SQL developer在oracle 10g模式下的快速测试:

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标准子字符串函数,而不是供应商特定的。

oracle documentation for SUBSTR

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

没有提供标准的SUBSTRING函数。提供了SUBSTR(输入,start-pos [,])相反(即长度是可选的)。Oracle提供了许多substr -变体(SUBSTRB, SUBSTRC,SUBSTR2, SUBSTR4,语法与for相同SUBSTR),主要用于处理各种非纯拉丁字符串类型的种类。Oracle不支持字符串提取与特殊sql风格的正则表达式。相反,它有REGEXP_SUBSTR提供字符串的函数提取,使用posix风格的正则表达式模式匹配。

试试这个

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

任何标准

最新更新