mysql - 我怎么知道哪个是函数,哪个是运算符?

标签 mysql documentation keyword

<分区>

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

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

By default, there must be no whitespace between a function name and the parenthesis following it.

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

在同一部分中有 INTERVAL() .仔细阅读该关键字的描述中显示以下行:

It is required that N1 < N2 < N3 < ... < Nn for this function to work correctly.

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


我的问题如下:

  • MySQL 中函数运算符 的概念之间是否存在内部差异?
  • 有没有办法在给定关键字的情况下判断它是否是运算符的函数?
  • 根据上下文,关键字可以同时是两者吗?例如,我知道有些关键字既可以是函数又可以是类型。

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

最佳答案

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

基本上,函数后跟一个用圆括号括起来的参数列表。即使是不带参数的函数,例如 now() 也需要括号。

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

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

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

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

关于mysql - 我怎么知道哪个是函数,哪个是运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23343140/

相关文章:

mysql - mySQL 中的集合和表有什么区别?

php - 你能帮我根据我的 mysql 查询在 php 中构建 json 吗?

javascript - react-native 文档是如何制作的?

R, tm-error of transformation 丢弃文档

php - Doctrine 同表关系问题?

php - 查询存储在另一个表上的用户首选项的有效方法

c - 在同一个包上使用 roxygen2 和 doxygen?

rest - 使用 Enunciate 生成 Java 客户端库

mysql - 以空格分隔关键字并搜索MySQL数据库

java - 最终关键字的优化