Does Oracle 10g comply with the ANSI SQL-1992 substring function standard?

3.1k Views Asked by At

According to the ANSI SQL-1992 standard, page 132, this is the syntax for the ANSI substring function:

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

A quick test in SQL developer on an oracle 10g schema:

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

Results in:

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

Does this mean Oracle 10g does not comply with this particular ANSI standard?

I simply would like to use an ANSI standard substring function instead of a vendor specific one.

2

There are 2 best solutions below

3
On BEST ANSWER

oracle documentation for SUBSTR

but you can check this http://troels.arvin.dk/db/rdbms/#functions-SUBSTRING

Doesn't provide the standard SUBSTRING function. Provides SUBSTR(input,start-pos[,length]) instead (i.e. length is optional). Oracle provides a number of SUBSTR-variants (SUBSTRB, SUBSTRC, SUBSTR2, SUBSTR4, same syntax as for SUBSTR), mainly for handling various kinds of non-latin-only string-types. Oracle doesn't have support for string-extraction with the special SQL-style regular expressions. Instead, it has the REGEXP_SUBSTR function which offers string extraction, using POSIX-style regular expression pattern matching.

2
On

Try this

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

It will work in any standard