2010-10-26 6 views
3

Je regarde la syntaxe de SQL, en particulier le character string literal.Interprétation SQL's BNF

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

ignorant la partie [ <introducer> <character set specification> ], cela signifie un ou plusieurs <quote> [ <character representation> ... ] <quote> s séparés par un <separator>?

Si oui, cela signifie-t-il que 'hello' 'world' devrait être analysé comme <character string literal>?

Pour la requête SELECT 'hello' 'world', retours Microsoft SQL Server 2005:

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

et MySQL 5.0 renvoie:

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

Je comprends que toutes les saveurs de SQL est différent, et qu'ils ne sont pas tous suivent la norme. J'essaie juste de déterminer si j'interprète correctement la BNF. Merci.

+0

Un point de mise en page mineur: le serveur SQL renvoie la valeur "bonjour" avec le monde de l'en-tête de colonne. "monde" est interprété comme un alias/identifiant. Et bonne question ... – gbn

Répondre

2

If so, does that mean that 'hello' 'world' should be parsed as one ?

Selon ANSI SQL, oui.

0

Pour clarifier ce qui se passe dans SQL Server, ce que vous êtes en train de faire est de renvoyer 'hello' avec un nom de colonne 'world'. Votre exemple est le même que:

SELECT 'hello' AS 'world' 

Si vous avez essayé de prolonger votre pensée plus loin, vous obtiendrez une erreur:

SELECT 'hello' 'world' 'now' 

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

Merci, j'ai compris cela dès le début. Ma question principale concerne la BNF. – jordanbtucker

0

Regardez la BNF pour <separator> ::=.

+0

et puis quoi? Je ne peux pas voir comment cela aide. – gbn

+0

Je l'interprète comme un ou plusieurs s ou s. – jordanbtucker