表达式是符号与运算符的组合,Microsoft® SQL Server™ 对其求值以获得单个数据值。简单的表达式可以是一个常量、变量、列或标量函数。可以用运算符将两个或更多的简单表达式联接起来组成复杂的表达式。
{ constant
| scalar_function
| [ alias.] column
| local_variable
| ( expression )
| ( scalar_subquery )
|
{ unary_operator
} expression
| expression { binary_operator
} expression
}
constant
是表示单个特定数据值的符号。constant 是一个或多个字母数字字符(字母 a-z、A-Z 和数字 0-9)或符号(惊叹号 (!)、at 符 (@)、数字符号 (#) 等等)。字符和 datetime 值要用引号括起来,而二进制字符串与数字常量则不必。有关更多信息,请参见常量。
scalar_function
是 Transact-SQL 语法的一个单元,用于提供特定的服务和返回单值。scalar_function 可以是内置标量函数(如 SUM、GETDATE 或 CAST 函数),也可以是用户定义函数。
[alias.]
是由 FORM 子句中的 AS 关键字分配给表的别名或者相关名称。
column
是一个列的名称。在表达式中只允许有列的名称;不允许指定 4 个部分的名称。
local_variable
是用户定义变量的名称。有关更多信息,请参见 DECLARE @local_variable。
(expression)
是本主题中定义的任意有效的 SQL Server 表达式。括号是分组运算符,确保括号内表达式中的运算符先运算,然后其结果再与别的表达式组合。
(scalar_subquery)
是返回一个值的子查询。例如:
SELECT MAX(UnitPrice)
FROM Products
{unary_operator}
是只有一个数字操作数的运算符:
一元运算符只能用于取值为数据类型的表达式中,此数据类型可以是数字数据类型中的任一种。
{binary_operator}
是用于组合两个表达式得出一个结果的运算符,binary _operator 可以是算术运算符、赋值运算符 (=)、位运算符、比较运算符、逻辑运算符、字符串连接运算符 (+) 或一元运算符。有关运算符的更多信息,请参见运算符。
对于由单个常量、变量、标量函数或列名组成的简单表达式,该表达式的数据类型、排序规则、精度、小数位数和值就是它所引用的元素的数据类型、排序规则、精度、小数位数和值。
如果两个表达式是用比较或者逻辑运算符组合的,则结果的数据类型是布尔型,值有三种:TRUE FALSE 或 UNKNOWN。有关布尔数据类型的更多信息,请参见运算符。
如果两个表达式是用算术运算符、位运算符或字符串运算符组合的,则结果的数据类型由运算符确定。
复杂的表达式由很多符号与运算符构成,得出一个单值结果。通过对组件表达式进行组合来确定结果表达式的数据类型、排序规则、精度和值,每次组合两个表达式,直到得到最后结果。表达式中元素组合的顺序由表达式中运算符的优先级决定。
两个表达式可以由一个运算符组合起来,只要它们具有该运算符支持的数据类型,并且满足至少下列一个条件:
如果没有支持的隐式或显式转换,两个表达式不能组合。
任何取值为字符串的表达式的排序规则都应遵循排序规则优先顺序规则。有关更多信息,请参见排序规则的优先顺序。
在 C 或 Microsoft Visual Basic® 这类编程语言中,表达式始终求得单值结果。Transact-SQL 选择列表中的表达式在该规则上有所不同:其表达式在结果集内按行单独计算。同一个表达式对结果集内的每一行可能会有不同的值,但该表达式在每一行的值是唯一的。例如,在这个 SELECT 语句中,选择列表中的引用 ProductID 和 1+2 都是表达式:
SELECT ProductID, 1+2
FROM Northwind.dbo.Products
表达式 1+2 在结果集的每一行都等于3。尽管表达式 ProductID 在结果集的每一行中产生一个唯一值,每一行的 ProductID 值也仅有一个。
相关文章