![]() |
1
4
为了完整起见,我正在回答自己的问题并链接到另一个问题。 question 我自己的。 这种行为似乎是SQL标准允许函数和括号之间有空格的直接结果。 因为它(通常)允许说函数名(x),所以当这个函数应用于第一个选择项时
如果这是一个函数名的上下文或者选择修改关键字,那么解析器将很难确定。 所以在上面的例子中,函数名实际上是解析器的函数名或关键字。 但它更进一步:由于函数名和括号之间的空间是允许的,解析器实际上无法区分
和
(它必须测试关键字以查看它们是否是函数),由于(x)将被解析为x,因此对于函数“name”或“u keyword”->“distinct”(以及所有其他选择修改关键字),两者之间没有区别
和
QED,但没有硬引用(假设 standard 不关心函数名和圆括号之间的空白,我相信是合理的,但是我不能按照BNF语法来引用确切的规则)。 注意:MySQL有一定数量的函数,它关心函数和括号之间的空白,但我相信这些是异常的(因此服务器选项可以忽略它)。 |
![]() |
2
1
有趣的场景。 正如你发现的,
相当于:
相当于:
即括号被视为表达式分组括号。 有趣的是,vb6/vbscript中出现了一个非常相似的问题,其中(对于函数(byref x))函数(x)、函数x和调用函数(x)都略有不同,它们通过引用传递的值(函数(x)传递对(x)表达式结果的引用,而不是x)传递的引用。 |
![]() |
hello_programmers · Mysql从其他表输出一列 2 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 2 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 2 年前 |
![]() |
Popo · Sql查询:返回数据库中不可用的where条件 2 年前 |
|
Hamdan Nuramdani · 对账单中一周内不同表中的数据求和 2 年前 |
|
Kugelfisch · 用php为数据库加密数据 2 年前 |