#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 с блокировкой поставщика.