我如何知道哪个是函数?哪个是运算符?

时间:2014-04-28 14:00:15

标签: mysql documentation keyword

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(),也出现在那里,没有提到它是函数还是运算符。


我的问题如下:

  • MySQL中 function operator 的概念之间是否存在内部差异?
  • 有没有办法弄清楚,给定一个关键字,它是否是运营商的功能?
  • 根据具体情况,关键字可以兼顾吗?我知道某些关键字可以是函数和类型,例如。

我希望知道这两者是为了理解MySQL的抽象结构,并将其用于语法高亮。

1 个答案:

答案 0 :(得分:0)

MySQL提供了一个“非类型”运算符列表here

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

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

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

对我来说最重要的区别是用户可以定义功能。但是用户不能(还)定义运营商。与面向对象语言不同,SQL不提供为运营商提供附加定义的方法。

而且,出于您的目的,您应该仔细阅读手册页以获取您关注的事项列表。