Интерпретация БНФ SQL - PullRequest
       9

Интерпретация БНФ SQL

3 голосов
/ 26 октября 2010

Я смотрю на синтаксис SQL, в частности, строковый литерал .

<character string literal> ::=
    [ <introducer> <character set specification> ]
    <quote> [ <character representation> ... ] <quote>
    [ { <separator> <quote> [ <character representation> ... ] <quote> }... ]

Игнорирование части [ <introducer> <character set specification> ] означает ли это один или несколько <quote> [ <character representation> ... ] <quote>s, разделенные <separator>?

Если это так, значит ли это, что 'hello' 'world' должен быть проанализирован как один <character string literal>?

Для запроса SELECT 'hello' 'world', Microsoft SQL Server 2005возвращает:

+-------+
| world |
+-------+
| hello |
+-------+

и MySQL 5.0 возвращает:

+------------+
| hello      |
+------------+
| helloworld |
+------------+

Я понимаю, что каждый вариант SQL отличается, и что они не все соответствуют стандарту.Я просто пытаюсь определить, правильно ли я интерпретирую БНФ.Спасибо.

Ответы [ 3 ]

2 голосов
/ 27 октября 2010

Если это так, означает ли это, что «привет», «мир» должен быть проанализирован как единое целое?

Согласно ANSI SQL, да.

0 голосов
/ 26 октября 2010

Посмотрите на БНФ для <separator> ::=.

0 голосов
/ 26 октября 2010

Чтобы прояснить, что происходит в SQL Server, вы на самом деле возвращаете «привет» с именем столбца «мир». Ваш пример такой же как:

SELECT 'hello' AS 'world'

Если вы попытаетесь расширить свою мысль, вы получите ошибку:

SELECT 'hello' 'world' 'now'

Line 1: Incorrect syntax near 'now'.
...