+ (Add) (Transact-SQL)
Add:两个数相加。这个加法算术运算符也可以将一个以天为单位的数字加到日期中。
语法:expression + expression
参数:expression :数字类别中任何一种数据类型(bit 数据库类型除外)的任何有效表达式。
结果类型:返回优先级较高的参数的数据类型。
例子1:使用加法运算符计算每个雇员离岗的总小时数。
select c.FirstName,LastName,e.VacationHours+SickLeaveHours as 'totalhours'
from HumanResources.Employee as e
join Person.Contact as c
on e.ContactID = c.ContactID
order by 'totalhours' asc
这个例子,要点在于理解join和on2个关键字。我的理解是当你在2个表内检索数据且2个表有关联字段时,用join关联2个表。
查了一下w3cschool:
JOIN: 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
- 仔细想想他们的差异。
例子2:使用使用加法运算符将数天添加到日期和时间值中
declare @startdate datetime,@adddays int
set @startdate = '1/10/1900 12:00 AM'
set @adddays = 5
select @startdate + 1.25 as 'start date',
@startdate + @adddays as 'add date'
这个例子主要讲在datetime类型的变量后使用加法运算符的作用。注意,1.25和@adddays 的单位都是天。
例子3:字符串和整数数据类型相加
declare @addvalue int
set @addvalue = 5
select '111222' + @addvalue
这个例子主要讲在字符串和整数相加的过程中,字符数据类型会转换为int,如果char中有无效字符,会报错。
+(一元加号)(Transact-SQL)
语法:+ numeric_expression
参数:numeric_expression:numeric 数据类型类别中任何数据类型(datetime 和 smalldatetime 数据类型除外)的任何有效表达式。
结果类型:除了无符号的 tinyint 表达式被提升为 smallint 结果之外,返回 numeric_expression 的数据类型。
备注:尽管一元加号可以出现在任何数值表达式之前,但它对表达式返回的值不执行操作。很明显,负表达式不会返回正值。若要返回负表达式的正值,请使用 ABS 函数。
例子1:将变量设置为正值
DECLARE @MyNumber decimal(10,2); SET @MyNumber = +123.45; SELECT @MyNumber; GO
这个例子主要学习到了decimal数据类型,上面讲的很详细了。
例子2:如何将一元加号用于负表达式和将 ABS() 函数用于同一负表达式上。一元加号不影响该表达式,但 ABS 函数将返回该表达式的正值。
DECLARE @Num1 int;
SET @Num1 = -5;
SELECT +@Num1, ABS(@Num1);
+(字符串串联)(Transact-SQL)
语法:expression + expression
参数:
字符和二进制数据类型类别中的任何一个数据类型的有效表达式,但 image、ntext 或 text 数据类型除外。两个表达式必须具有相同的数据类型,或者其中一个表达式必须能够隐式转换为另一个表达式的数据类型。
在二进制字符串之间串联二进制字符串和任何字符串时,必须显式转换字符数据。
例子如下:
DECLARE @mybin1 binary(5), @mybin2 binary(5) SET @mybin1 = 0xFF SET @mybin2 = 0xA5 -- No CONVERT or CAST function is required because this example -- concatenates two binary strings.
--连接2个二进制字符串,所以不需要convert SELECT @mybin1 + @mybin2 -- A CONVERT or CAST function is required because this example -- concatenates two binary strings plus a space.
--连接2个二进制字符串和一个空格,所以需要用convert或者cast SELECT CONVERT(varchar(5), @mybin1) + ' ' + CONVERT(varchar(5), @mybin2) -- Here is the same conversion using CAST. SELECT CAST(@mybin1 AS varchar(5)) + ' ' + CAST(@mybin2 AS varchar(5))
结果:返回优先级最高的参数的数据类型。
例子1:使用 CONVERT 函数串联 numeric 和 date 数据类型。
SELECT 'The order is due on ' + CONVERT(varchar(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
这个关键不明白的在于CONVERT这个函数的应用。w3c解释如下:
CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据。
语法:CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 规定目标数据类型(带有可选的长度)。
data_to_be_converted 含有需要转换的值。style规定日期/时间的输出格式。
如:style = 101,则style格式为mm/dd/yy
例子3:串联多个字符串,形成一个长字符串,显示 Adventure Works Cycles 的副总裁的姓氏和名字的首字母。逗号加在姓氏后,句点加在名字首字母后。
SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.Title
FROM Person.Contact AS c JOIN HumanResources.Employee AS e ON c.ContactID = e.ContactID
WHERE e.Title LIKE 'Vice%'
ORDER BY LastName ASC;
语法没什么难度,使用了substring截取字符串首字母。
-(负)(Transact-SQL)
-(减)(Transact-SQL)
基本等同对应的+运算符,不做笔记
&(位与)(Transact-SQL)
语法:expression & expression
参数: 整数数据类型分类中的任何数据类型或者 bit、binary 或 varbinary 数据类型的任何有效表达式。expression 被视为位运算的二进制数字。(在位运算中,只有一个 expression 可以是 binary 或 varbinary 数据类型。)
结果类型:如果输入值为 int,则为 int。如果输入值为 smallint,则为 smallint。tinyint 如果输入值是 tinyint 或 bit。
备注:& 位运算符将在两个表达式之间执行位与逻辑运算,从两个表达式取对应的位。当且仅当输入表达式中两个位(正在被解析的当前位)的值都为 1 时,结果中的位才被设置为 1;否则,结果中的位被设置为 0。
如果左侧和右侧的表达式具有不同的整数数据类型(例如,左侧的 expression 的数据类型为 smallint,右侧的 expression 的数据类型为 int),则会将较小数据类型的参数转换为较大数据类型。
例子1:
USE tempdb; GO IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'bitwise') DROP TABLE bitwise; GO CREATE TABLE bitwise ( a_int_value int NOT NULL, b_int_value int NOT NULL ); GO INSERT bitwise VALUES (170, 75); GO
检查是否有bitwise这个表,没有的话,添加一个。包含a_int_value和b_int_value2个字段。
USE tempdb; GO SELECT a_int_value & b_int_value FROM bitwise; GO
执行位运算。将int值转化为2进制后,进行位运算。
170(a_int_value
或 A
)的二进制表示形式是 0000 0000 1010 1010
。75(b_int_value
或 B
)的二进制表示形式是 0000 0000 0100 1011
。对上述两个值执行“位与”运算将产生二进制结果 0000 0000 0000 1010
,即十进制数 10。
(A & B) 0000 0000 1010 1010 0000 0000 0100 1011 ------------------- 0000 0000 0000 1010