SQL 运算符

运算符是一种符号，用来指定要在一个或多个表达式中执行的操作。下表列出了 SQL Server 所使用的运算符类别。

算术运算符 | 逻辑运算符
赋值运算符 | 字符串串联运算符
按位运算符 | 一元运算符
比较运算符 |

## 算术运算符

对两个表达式执行数学运算，这两个表达式可以是数值数据类型类别的一个或多个数据类型。有关数据类型类别的详细信息，请参阅 Transact-SQL 语法约定。

运算符 | 含义
+（加） | 加
-（减） | 减
*（乘） | 乘
/（除） | 除
%（取模） | 例如，12 % 5 = 2，这是因为 12 除以 5，余数为 2。

加 (+) 和减 (-) 运算符也可用于对 datetime 和 smalldatetime 值执行算术运算。

## 赋值运算符

等号 (=) 是唯一的 Transact-SQL 赋值运算符。在以下示例中，将创建一个 @MyCounter 变量，然后赋值运算符将 @MyCounter 设置为表达式返回的值。

DECLARE @MyCounter INT;

SET @MyCounter = 1;

也可以使用赋值运算符在列标题和定义列值的表达式之间建立关系。以下示例显示列标题 FirstColumnHeading 和 SecondColumnHeading。在所有行的列标题 FirstColumnHeading 中均显示字符串 xyz。然后，在 SecondColumnHeading 列标题中列出来自 Product 表的每个产品 ID。

## 位运算符

在两个表达式之间执行位操作，这两个表达式可以为整数数据类型类别中的任何数据类型。

运算符 | 含义
& （位与） | 位与（两个操作数）。
|（位或） | 位或（两个操作数）。
^（位异或） | 位异或（两个操作数）。

## 比较运算符

测试两个表达式是否相同。除了 text、ntext 或 image 数据类型的表达式外，比较运算符可以用于所有的表达式。下表列出了 Transact-SQL 比较运算符。

运算符 | 含义
=（等于） | 等于
> （大于） | 大于
< （小于） | 小于
>=（大于等于） | 大于等于
<=（小于等于） | 小于等于
<> （不等于） | 不等于
!=（不等于） | 不等于（非 SQL-92 标准）
!<（不小于） | 不小于（非 SQL-92 标准）
!>（不大于） | 不大于（非 SQL-92 标准）

## 逻辑运算符

对某些条件进行测试，以获得其真实情况。逻辑运算符和比较运算符一样，返回带有 TRUE、FALSE 或 UNKNOWN 值的 Boolean 数据类型。

运算符 | 含义
ALL | 如果一组的比较都为 TRUE，那么就为 TRUE。
AND | 如果两个布尔表达式都为 TRUE，那么就为 TRUE。
ANY | 如果一组的比较中任何一个为 TRUE，那么就为 TRUE。
BETWEEN | 如果操作数在某个范围之内，那么就为 TRUE。
EXISTS | 如果子查询包含一些行，那么就为 TRUE。
IN | 如果操作数等于表达式列表中的一个，那么就为 TRUE。
LIKE | 如果操作数与一种模式相匹配，那么就为 TRUE。
NOT | 对任何其他布尔运算符的值取反。
OR | 如果两个布尔表达式中的一个为 TRUE，那么就为 TRUE。
SOME | 如果在一组比较中，有些为 TRUE，那么就为 TRUE。

## 字符串运算

加号 (+) 是字符串串联运算符，可以用它将字符串串联起来。其他所有字符串操作都使用字符串函数（如 SUBSTRING）进行处理。

默认情况下，对于 varchar 数据类型的数据，在 INSERT 或赋值语句中，空的字符串将被解释为空字符串。在串联 varchar、char 或 text 数据类型的数据时，空的字符串被解释为空字符串。例如，'abc' + '' + 'def' 被存储为 'abcdef'。但是，如果兼容级别设置为 65，则空常量将作为单个空白字符处理，'abc' + '' + 'def' 将被存储为 'abc def'。

## 一元运算符

只对一个表达式执行操作，该表达式可以是 numeric 数据类型类别中的任何一种数据类型。

Operator | 含义
+（正） | 数值为正。
-（负） | 数值为负。
~（位非） | 返回数字的非。

+（正）和 -（负）运算符可以用于 numeric 数据类型类别中任一数据类型的任意表达式。~ （位非）运算符只能用于整数数据类型类别中任一数据类型的表达式。

比如：x=-1