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的抽象结构,并将其用于语法高亮。
答案 0 :(得分:0)
MySQL提供了一个“非类型”运算符列表here。
基本上,函数后面是括在括号中的参数列表。即使是不带参数的函数,例如now()
也需要括号。
另一方面,运算符是MySQL查询语言语法的一部分。这些是解析器已知的,它可以识别它们。运算符通常使用“中缀”表示法,其中运算符出现在参数之间。但是,这不是必需的(只考虑一元减运算符)。
粗略地看一下运算符列表,可以看出某些东西既可以是运算符,也可以是函数。一个例子是mod()
。
对我来说最重要的区别是用户可以定义功能。但是用户不能(还)定义运营商。与面向对象语言不同,SQL不提供为运营商提供附加定义的方法。
而且,出于您的目的,您应该仔细阅读手册页以获取您关注的事项列表。