2010-03-23 11 views
3

Vérification quelques SGBDR Je trouve que les choses commeSQL standard permet des espaces entre les noms de fonction et les parenthèses

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

sont admis (espace préavis entre les fonctions globales et entre parenthèses).

Quelqu'un pourrait-il fournir un pointeur vers le standard SQL lui-même où cela est défini (quelle version fera l'affaire)?

EDIT: Les travaux ci-dessus dans Postgres, MySQL a besoin set sql_mode = "IGNORE_SPACE"; tel que défini here (pour la liste complète des fonctions qui sont influencés par ce mode serveur voir dans this ref). MS SQL est censé accepter ce qui précède.

En outre, il semble que la réponse est la plus probable dans le standard. Je peux suivre le BNF concernant les symboles et les termes normaux, mais je me perds quand il s'agit de la définition des espaces et des séparateurs dans cette partie de la sélection.

Répondre

1

Oui; l'espace blanc entre les jetons est pratiquement ignoré. La seule exception est, officiellement, avec la concaténation littérale de chaîne adjacente - mais la norme est plus étrange que n'importe quelle implémentation.

Voir: http://savage.net.au/SQL/

+0

Merci pour le lien aux normes. En regardant la grammaire si je peux y arriver. – Unreason

+0

La question est de savoir si l'espace blanc ** entre le nom de la fonction agrégée et la parenthèse ** est ignoré (selon la norme), et où exactement cela est défini. Est-ce la partie pertinente de la grammaire? (voir le commentaire suivant) – matteo

+0

:: = COUNT [] | [] | [] | [] :: = [] Parce que si oui, il me semble que ce dit qu'un espace n'est pas autorisé, mais je suis loin de connaître les grammaires. – matteo

-1

Je ne peux pas fournir de pointeur, mais je crois que cet espace blanc est ignoré.

Je sais que c'est en T-SQL, et environ 80% sur l'implémentation de MySQL.

0

Cela fonctionne dans SQL Server 2005:

SELECT COUNT (*) 
    FROM TABLE 

... tandis qu'un espace entre COUNT et (*) sur MySQL provoque une erreur MySQL 1064 (erreur de syntaxe). Je n'ai pas Oracle ou Postgres à portée de main pour tester. Quelle que soit la norme, cela dépend de l'implémentation dans le fournisseur et de la version que vous utilisez.

+0

en fait cela fonctionnera aussi dans mysql si vous définissez sql_mode = "IGNORE_SPACE"; (que IMHO essaie de rapprocher de la norme) – Unreason