表达式语法 (Expression Syntax)

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

表达式包含几种类型:

  • 标识符,可参考模式对象名
  • 谓词、数值、字符串、日期表达式等,这些类型的字面值也是表达式。
  • 函数调用,窗口函数等。可参考函数和操作符概述窗口函数
  • 其他,包括 paramMarker(即 ?)、系统变量和用户变量、CASE 表达式等。

以下规则是表达式的语法,该语法基于 TiDB parser 的 parser.y 文件中所定义的规则。此外,下列语法图的可导航版本请参考 TiDB SQL 语法图

Expression
singleAtIdentifierassignmentEqNOTExpressionlogOrXORlogAndExpressionMATCH(ColumnNameList)AGAINST(BitExprFulltextSearchModifierOpt)PredicateExprIsOrNotOpNULLCompareOpsingleAtIdentifierassignmentEqPredicateExprAnyOrAllSubSelectIsOrNotOptrueKwdfalseKwdUNKNOWN
PredicateExpr
BitExprBetweenOrNotOpBitExprANDBitExprInOrNotOp(ExpressionList)SubSelectLikeOrNotOpSimpleExprLikeEscapeOptRegexpOrNotOpSimpleExpr
BitExpr
BitExpr|&<<>>*/%DIVMOD^BitExpr+-BitExprINTERVALExpressionTimeUnitSimpleExpr
SimpleExpr
SimpleIdent->->>stringLitFunctionCallKeywordFunctionCallNonKeywordFunctionCallGenericSimpleExprCOLLATECollationNamepipesSimpleExprWindowFuncCallLiteralparamMarkerVariableSumExpr!~-+NOTBINARYSimpleExprEXISTSSubSelect(ExpressionList,ROW(ExpressionList,ExpressionbuiltinCast(ExpressionASCastTypeDEFAULTVALUES(SimpleIdentCONVERT(Expression,CastTypeUSINGCharsetName)CASEExpressionOptWhenClauseElseOptEND