Соответствует ли Oracle 10g стандарту функции подстроки ANSI SQL-1992?

#sql #oracle #ansi-sql #ansi-sql-92

#sql #Oracle #ansi-sql #ansi-sql-92

Вопрос:

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

Комментарии:

1. да, я думаю, что это не соответствует

Ответ №1:

документация oracle для SUBSTR

но вы можете проверить этоhttp://troels.arvin.dk/db/rdbms/#functions-SUBSTRING

Не предоставляет стандартную функцию ПОДСТРОКИ. Вместо этого предоставляет SUBSTR(input,start-pos[,длина]) (т. е. длина необязательна). Oracle предоставляет ряд SUBSTR-вариантов (SUBSTRB, SUBSTRC, SUBSTR2, SUBSTR4, тот же синтаксис, что и для SUBSTR), в основном для обработки различных типов строк, использующих только нелатинские. Oracle не поддерживает извлечение строк с помощью специальных регулярных выражений в стиле SQL. Вместо этого он имеет функцию REGEXP_SUBSTR, которая предлагает извлечение строки с использованием сопоставления с шаблоном регулярных выражений в стиле POSIX.

Комментарии:

1. Также взгляните на соответствие Oracle Core SQL: 2003 . «Oracle имеет эквивалентную функциональность для этих подфункций:», «E021-06, функция ПОДСТРОКИ: вместо этого используйте функцию SUBSTR».

2. Да ладно, насколько сложно для Oracle добавить функцию ПОДСТРОКИ? Я вижу, что он имеет специфический синтаксис (а не является простой функцией), но SQL уже переполнен этим.

3. @marcus Вероятно, это просто незначительная модификация в лексере.

Ответ №2:

Попробуйте это

ВЫБЕРИТЕ SUBSTRING(‘ASDF’,1,1) Из DUAL;

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

Комментарии:

1. -1 Не отвечает на вопрос OP и неверен — функция Oracle является SUBSTR.

2. Операционная система хочет использовать стандартный SQL ANSI, а не проприетарный SQL с блокировкой поставщика.