Skip to content

Commit

Permalink
update expression-syntax.md (#3313)
Browse files Browse the repository at this point in the history
  • Loading branch information
tangenta authored May 26, 2020
1 parent 8a0e7b8 commit ee5e8ef
Showing 1 changed file with 22 additions and 56 deletions.
78 changes: 22 additions & 56 deletions expression-syntax.md
Original file line number Diff line number Diff line change
@@ -1,68 +1,34 @@
---
title: 表达式语法
summary: 本文列出 TiDB 的表达式语法。
category: reference
aliases: ['/docs-cn/dev/reference/sql/language-structure/expression-syntax/']
---

# 表达式语法 (Expression Syntax)

在 TiDB 中,以下规则是表达式的语法,你可以在 `parser/parser.y` 中找到定义。TiDB 的语法解析是基于 yacc 的
表达式是一个或多个值、操作符或函数的组合。在 TiDB 中,表达式主要使用在 `SELECT` 语句的各个子句中,包括 Group by 子句、Where 子句、Having 子句、Join 条件以及窗口函数等。此外,部分 DDL 语句也会使用到表达式,例如建表时默认值的设置、生成列的设置,分区规则等

```
Expression:
singleAtIdentifier assignmentEq Expression
| Expression logOr Expression
| Expression "XOR" Expression
| Expression logAnd Expression
| "NOT" Expression
| Factor IsOrNotOp trueKwd
| Factor IsOrNotOp falseKwd
| Factor IsOrNotOp "UNKNOWN"
| Factor
表达式包含几种类型:

Factor:
Factor IsOrNotOp "NULL"
| Factor CompareOp PredicateExpr
| Factor CompareOp singleAtIdentifier assignmentEq PredicateExpr
| Factor CompareOp AnyOrAll SubSelect
| PredicateExpr
+ 标识符,可参考[模式对象名](/schema-object-names.md)
+ 谓词、数值、字符串、日期表达式等,这些类型的[字面值](/literal-values.md)也是表达式。
+ 函数调用,窗口函数等。可参考[函数和操作符概述](/functions-and-operators/functions-and-operators-overview.md)[窗口函数](/functions-and-operators/window-functions.md)
+ 其他,包括 paramMarker(即 `?`)、系统变量和用户变量、CASE 表达式等。

PredicateExpr:
PrimaryFactor InOrNotOp '(' ExpressionList ')'
| PrimaryFactor InOrNotOp SubSelect
| PrimaryFactor BetweenOrNotOp PrimaryFactor "AND" PredicateExpr
| PrimaryFactor LikeOrNotOp PrimaryExpression LikeEscapeOpt
| PrimaryFactor RegexpOrNotOp PrimaryExpression
| PrimaryFactor
以下规则是表达式的语法,该语法基于 TiDB parser 的 [parser.y](https://github.com/pingcap/parser/blob/master/parser.y) 文件中所定义的规则。此外,下列语法图的可导航版本请参考 [TiDB SQL 语法图](https://pingcap.github.io/sqlgram/#Expression)

PrimaryFactor:
PrimaryFactor '|' PrimaryFactor
| PrimaryFactor '&' PrimaryFactor
| PrimaryFactor "<<" PrimaryFactor
| PrimaryFactor ">>" PrimaryFactor
| PrimaryFactor '+' PrimaryFactor
| PrimaryFactor '-' PrimaryFactor
| PrimaryFactor '*' PrimaryFactor
| PrimaryFactor '/' PrimaryFactor
| PrimaryFactor '%' PrimaryFactor
| PrimaryFactor "DIV" PrimaryFactor
| PrimaryFactor "MOD" PrimaryFactor
| PrimaryFactor '^' PrimaryFactor
| PrimaryExpression
**Expression:**

PrimaryExpression:
Operand
| FunctionCallKeyword
| FunctionCallNonKeyword
| FunctionCallAgg
| FunctionCallGeneric
| Identifier jss stringLit
| Identifier juss stringLit
| SubSelect
| '!' PrimaryExpression
| '~' PrimaryExpression
| '-' PrimaryExpression
| '+' PrimaryExpression
| "BINARY" PrimaryExpression
| PrimaryExpression "COLLATE" StringName
```
![Expression](/media/sqlgram/Expression.png)

**PredicateExpr:**

![PredicateExpr](/media/sqlgram/PredicateExpr.png)

**BitExpr:**

![BitExpr](/media/sqlgram/BitExpr.png)

**SimpleExpr:**

![SimpleExpr](/media/sqlgram/SimpleExpr.png)

0 comments on commit ee5e8ef

Please sign in to comment.