Допускает ли стандарт SQL пробел между именами функций и круглыми скобками - PullRequest
4 голосов
/ 23 марта 2010

Проверяя несколько СУБД, я обнаружил, что такие вещи, как

SELECT COUNT (a), SUM (b)  
FROM TABLE

разрешено (обратите внимание на пробел между агрегатными функциями и круглыми скобками).

Может ли кто-нибудь предоставить указатель на сам стандарт SQL, где это определено (подойдет любая версия)?

EDIT: Вышеописанное работает в postgres, mysql требует set sql_mode = "IGNORE_SPACE";, как определено здесь (полный список функций, на которые влияет этот режим сервера, см. В this ref) Сообщается, что MS SQL принимает вышеуказанное.

Кроме того, похоже, что ответ наиболее вероятен в стандарте . Я могу следовать BNF относительно обычных символов и терминов, но я теряюсь, когда дело доходит до определения пробела и разделителей в этой части выбора.

Ответы [ 3 ]

1 голос
/ 23 марта 2010

Да; пустое пространство между токенами практически игнорируется. Официально исключение составляет только конкатенация литералов смежных строк - но стандарт более странный, чем любая реализация.

См .: http://savage.net.au/SQL/

0 голосов
/ 23 марта 2010

Это работает в SQL Server 2005:

SELECT COUNT   (*)
  FROM TABLE

... в то время как один пробел между COUNT и (*) в MySQL вызывает ошибку MySQL 1064 (синтаксическая ошибка). У меня нет Oracle или Postgres, пригодных для тестирования.

Каким бы ни был стандарт, он зависит от реализации в поставщике и используемой вами версии.

0 голосов
/ 23 марта 2010

Я не могу предоставить указатель, но я считаю, что такие пробелы игнорируются.

Я знаю, что он написан на T-SQL, и примерно на 80% уверен в реализации MySQL.

...