Соответствует ли 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 на схеме оракула 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 вместо функции конкретного поставщика.


person JavaRocky    schedule 16.04.2011    source источник
comment
да, я думаю, что это не соответствует   -  person Troydm    schedule 16.04.2011


Ответы (2)


документация 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.

person zudokod    schedule 16.04.2011
comment
Также взгляните на Соответствие Oracle базовому SQL. :2003. Oracle имеет эквивалентную функциональность для этих подфункций: E021-06, функция SUBSTRING: вместо этого используйте функцию SUBSTR. - person Jon Heller; 17.04.2011
comment
Да ладно, насколько сложно для Oracle добавить функцию SUBSTRING? Я вижу, что у него специфический синтаксис (а не простая функция), но в SQL этого уже полно. - person marcus; 27.10.2011
comment
@marcus Вероятно, это просто незначительная модификация лексера. - person Lluis Martinez; 06.05.2016

Попробуй это

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

Он будет работать в любом стандарте

person Ankit    schedule 16.04.2011
comment
-1 Не отвечает на вопрос OP и ошибается - функция Oracle - SUBSTR. - person Graham; 17.04.2011
comment
OP хочет использовать стандартный SQL ANSI, а не закрытый SQL поставщика. - person lit; 23.09.2014