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 [ ] | [ ] | [ ] | [ ] ::= [ ] 因为如果是这样,在我看来这表示不允许使用空格,但我对语法并不熟悉。 这是一般的经验法则;除了在“字符串”中以及根据需要分隔标记和关键字之外,空格对 SQL 的解释无关紧要。你不会在 BNF 中找到它。它将单独记录。您可以将每个标记写在自己的行上,并在其后加上一个空行,并且 SQL 将被解释为就好像它都在一行上一样,根本没有不必要的空格。 详细信息可以在2003标准第5.2节的9075-2(SQL/Foundation)中找到。然而,它并不容易理解(它跨越了语法规则 3-11),并且包括对标准另一部分的引用。您可以在所引用的语法中搜索<separator><token><white space>,但这并不能说明所有内容。【参考方案3】:

这适用于 SQL Server 2005:

SELECT COUNT   (*)
  FROM TABLE

...而 MySQL 上 COUNT(*) 之间的一个空格会导致 MySQL 1064 错误(语法错误)。我没有方便测试的 Oracle 或 Postgres。

无论标准是什么,它都取决于您使用的供应商和版本的实现。

【讨论】:

实际上如果你设置 sql_mode = "IGNORE_SPACE"; 它也可以在 mysql 中工作。 (恕我直言,试图使其更接近标准)

以上是关于SQL标准是不是允许函数名和括号之间有空格的主要内容,如果未能解决你的问题,请参考以下文章

名称验证表单不允许名称之间有空格[重复]

shell脚本读取文件值并进行比较

用于 SELECT 和 WHERE 子句的函数

嗯。。。。。SQL函数名之DATEADD的用法

JS中函数名后面的括号加与不加的区别和作用

JavaWeb CSS