T-SQL有几种不同的语言元素可以指定逻辑表达式, 例如,查询过滤器( WHERE 和 HAVING )、CHECK约束等。在逻辑表达式中可以使用各种谓词(取值为TRUE、 FALSE或UNKNOWN的表达式)和运算符。
一.谓词
T-SQL支持的谓词包括IN、BETWEEN,以及LIKE等.
IN 这个谓词用于检查一个值(或标噩表达式)是否与一组元素中的至少一个相等。例如,以下查询返回订单ID等于10248、或10249、或10250的订单。
SELECT orderid, empid,orderdate FROM Sales.Orders WHERE orderid IN(10248, 10249, 10250);
BETWEEN 这个谓词用于检查一个值是否在指定的范围内,包括两个指定的边界值。例如,以下查询返回订单ID在10300到10310之间的所有订单:
SELECT orderid, empid, orderdate FROM sales.Orders WHERE orderid BETWEEN 10300 AND 10310;
LIKE 这个谓词用于检查一个字符串值是否与指定的模式匹配。例如,以下查询返回姓氏以字符"王"开头的所有雇员:
SELECT empid, firstname, lastname FROM HR.Employees WHERE lastname LIKE N'王%';
N代表National(国际化),用于表示字符串是Unicode数据类型(NCHAR或NVARCHAR),与之相对应的是常规的字符数据类型(CHAR或YARCHAR)。
二.运算符
T-SQL支持下列比较运算符:=、>、<、>=、<=、<>、!=、!>、!<,其中最后三个运算符不是标准运算符,建议尽可能避免使用非标准运算符。以下查询返回2017年5月1日之后生成的所有订单:
SELECT orderid, empid, orderdate FROM sales.orders WHERE orderdate >= '20170501';
如果要把多个逻辑表达式组合起来,可以使用逻辑运算符OR和AND。如果想对布尔型表达式取反,可以使用NOT运算符。例如,以下查询返回2008年1月1日之后,由ID为1、3、5的雇员处理过的所有订单:
SELECT orderid, empid, orderdate FROM sales.orders WHERE orderdate >= '20080101' NO empid IN (l, 3, 5);
T-SQL支待以下四种简单的算术运算符:+、-、*、/,以及%运算符,%返回一个整数除法运算的余数。例如,以下查询对订单的数量、单价、折扣进行算术处理, 计算出订单最终应该支付的金额:
SELECT orderid, productid, qty, unitprice, discount, qty* unitprice * (1 -discount) AS val FROM Sales.orderoetails;
在T-SQL中,涉及两个运算对象的标量表达式的数据类型取决于数据类型的优先级,由优先级较高的运算对象决定。如果两个运算对象具有相同的数据类型,表达式的结果也为相同的数据类型。例如,两个整数(INT)相除,得到的还是一个整数。表达式 5/2, 结果返回的是整数2,而不是实数2.5。当处理常量时,这不算什么问题,因为总可以在整数常量后面加一个小数点(.),将其转换为实数。但如果正在处理的是两个整数列(例如,col1/col2), 而且想让计算结果为实数的话,就需要将运算对象转换为适当的类型:CAST(col1 AS NUMERIC(12, 2))/ CAST(col2 AS NUMERIC(12, 2))。 NUMERIC(12, 2)这个数据类型的精度为12,带有2位小数,也就是总共有12位 数字,其中包括小数点后面的2位数字。
如果两个运算对象具有不同的类型,则具有较低类型优先级的运算对象就自动转换成更高级的类型。例如,在表达式5/2.0中,第一个运算对象是整数(INT), 第二个是实数(NUMERIC)。因为 SQL Server 认为 NUMERIC 比 INT 更高级,所以在开始算术运算之前,就隐式地把 INT 类型的运算对象5转换成NUMERIC类型的5.0,这样就得到了结果2.5。
当在同一表达式中出现多个运算符时,SQL Server根据运算符的优先级规则依次对它们进行计算。以下列表从高到低列出了各运算符的优先级:
1. () (Parentheses)
2. *(Multiply),/ (Division),% (Modulo)
3. + (Positive), -(Negative},+ (Add),(+ Concatenate),-(Subtract)
4. =, >, <, >=, <=, <>, !=, !>, !<(Comparison operators)
5. NOT
6. AND
7. BETWEEN, IN, LIKE, OR
8. = (Assignment)
好了,本篇文章就介绍到这儿,欢迎大家留言交流;喜欢或有帮助到您的话,点个赞或推荐支持一下!