SQL标准是不是允许函数名和括号之间有空格
Posted
技术标签:
【中文标题】SQL标准是不是允许函数名和括号之间有空格【英文标题】:Does SQL standard allows whitespace between function names and parenthesisSQL标准是否允许函数名和括号之间有空格 【发布时间】:2011-01-30 21:31:38 【问题描述】:检查几个 RDBMS 我发现类似
SELECT COUNT (a), SUM (b)
FROM TABLE
是允许的(注意聚合函数和括号之间的空格)。
谁能提供一个指向 SQL 标准本身的指针(任何版本都可以)?
编辑:
以上在 postgres 中工作,mysql 需要 set sql_mode = "IGNORE_SPACE";
定义为 here(有关受此服务器模式影响的函数的完整列表,请参见 this 参考)。
据报道 MS SQL 接受上述内容。
另外,答案似乎最有可能在standard 中。关于常规符号和术语,我可以按照BNF 进行操作,但是当涉及到选择部分中空格和分隔符的定义时,我会迷失方向。
【问题讨论】:
【参考方案1】:我无法提供指针,但我相信这样的空白会被忽略。
我知道它在 T-SQL 中,并且大约 80% 确定 MySQL 的实现。
【讨论】:
【参考方案2】:是的;标记之间的空白基本上被忽略了。唯一的例外是,正式地,使用相邻的字符串文字连接 - 但标准比任何实现都更奇怪。
见:http://savage.net.au/SQL/
【讨论】:
感谢标准的链接。如果我能解决的话,看看语法。 问题是是否忽略聚合函数名称和括号之间的空格(根据标准),以及具体定义的位置。这是语法的相关部分吗? (见下一条评论) ::= COUNT [ ] | [ ] | [ ] |<separator>
、<token>
、<white space>
,但这并不能说明所有内容。【参考方案3】:
这适用于 SQL Server 2005:
SELECT COUNT (*)
FROM TABLE
...而 MySQL 上 COUNT
和 (*)
之间的一个空格会导致 MySQL 1064 错误(语法错误)。我没有方便测试的 Oracle 或 Postgres。
无论标准是什么,它都取决于您使用的供应商和版本的实现。
【讨论】:
实际上如果你设置 sql_mode = "IGNORE_SPACE"; 它也可以在 mysql 中工作。 (恕我直言,试图使其更接近标准)以上是关于SQL标准是不是允许函数名和括号之间有空格的主要内容,如果未能解决你的问题,请参考以下文章