【问题标题】:How do I know which is a function and which is an operator? [closed]我怎么知道哪个是函数,哪个是运算符? [关闭]
【发布时间】:2014-04-28 14:00:15
【问题描述】:

MySQL 同时具有函数运算符。但是,对于任意关键字是函数还是运算符,并不清楚。

例如,我相信ASCII() 是一个函数(它出现在手册的string functions 部分)。但是,LIKE 也出现在那里,它似乎不是一个函数;例如,由于语法不会在 LIKE 关键字之后强制使用 (...),而 docs 提到了这一点

默认情况下,函数名和后面的括号之间不能有空格。

在某些情况下,这很清楚。例如,IN 关键字出现在手册的 Comparison Functions and Operators 部分(非公开的部分名称)中,并以名称 IN() 出现在那里(好像它是一个函数),但示例显示SELECT 2 IN (0,3,5,7);,暗示这是一个运算符(注意关键字后面的空格)。

在同一部分有INTERVAL()。仔细阅读会发现这个关键字的描述中有以下一行:

此功能需要N1 < N2 < N3 < ... < Nn才能正常工作。

这暗示这确实是一个函数,而不是一个运算符。 LEAST(),也出现在那里,没有提到是函数还是运算符。


我的问题如下:

  • functionoperator 在 MySQL 中的概念有什么内在区别吗?
  • 有没有办法确定给定关键字,它是否是运算符的函数?
  • 根据上下文,一个关键字可以同时是两者吗?例如,我知道有些关键字既可以是函数也可以是类型。

我想知道这既是为了理解 MySQL 的抽象结构,也是为了将它用于语法高亮。

【问题讨论】:

    标签: mysql documentation keyword


    【解决方案1】:

    MySQL 提供了“非类型化”运算符here 的列表。

    基本上,函数后跟括在括号中的参数列表。即使是不带参数的函数,例如now(),也需要括号。

    另一方面,运算符是 MySQL 查询语言语法的一部分。这些对于识别它们的解析器是已知的。运算符通常使用“中缀”表示法,其中运算符出现在参数之间。但是,这不是必需的(只需考虑一元减号运算符)。

    粗略地看一下操作符列表可以看出,某些东西既可以是操作符,也可以是函数。一个例子是mod()

    对我来说最重要的区别是用户可以定义函数。但是用户(还)不能定义运算符。与面向对象的语言不同,SQL 不提供为运算符提供额外定义的方法。

    而且,为了您的目的,您应该仔细阅读手册页以获取您关心的事情的列表。

    【讨论】:

    • 谢谢;但是,IN 没有出现在您链接的页面中,正如我所写的,它似乎是一个运算符。关于该关键字的任何具体猜测?
    • @Bach。 . .它确实出现在更具体的列表之一 (dev.mysql.com/doc/refman/5.7/en/comparison-operators.html) 上。但是该列表同时适用于运算符和函数,因此得出的结论是它是一个函数——in 不是。
    猜你喜欢
    • 1970-01-01
    • 2017-03-14
    • 2017-02-14
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    相关资源
    最近更新 更多