笔记1

+ (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 数据类型类别中任何数据类型(datetimesmalldatetime 数据类型除外)的任何有效表达式。

结果类型:除了无符号的 tinyint 表达式被提升为 smallint 结果之外,返回 numeric_expression 的数据类型。

备注:尽管一元加号可以出现在任何数值表达式之前,但它对表达式返回的值不执行操作。很明显,负表达式不会返回正值。若要返回负表达式的正值,请使用 ABS 函数。

 

例子1:将变量设置为正值

DECLARE @MyNumber decimal(10,2);
SET @MyNumber = +123.45;
SELECT @MyNumber;
GO
image 
这个例子主要学习到了decimal数据类型,上面讲的很详细了。
 
例子2:如何将一元加号用于负表达式和将 ABS() 函数用于同一负表达式上。一元加号不影响该表达式,但 ABS 函数将返回该表达式的正值。
DECLARE @Num1 int; 
SET @Num1 = -5; 
SELECT +@Num1, ABS(@Num1);

 

+(字符串串联)(Transact-SQL)

语法:expression + expression

参数:

字符和二进制数据类型类别中的任何一个数据类型的有效表达式,但 imagentexttext 数据类型除外。两个表达式必须具有相同的数据类型,或者其中一个表达式必须能够隐式转换为另一个表达式的数据类型。

在二进制字符串之间串联二进制字符串和任何字符串时,必须显式转换字符数据。

例子如下:

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 函数串联 numericdate 数据类型。

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

参数: 整数数据类型分类中的任何数据类型或者 bitbinaryvarbinary 数据类型的任何有效表达式。expression 被视为位运算的二进制数字。(在位运算中,只有一个 expression 可以是 binaryvarbinary 数据类型。)

结果类型:如果输入值为 int,则为 int。如果输入值为 smallint,则为 smallinttinyint 如果输入值是 tinyintbit

备注:& 位运算符将在两个表达式之间执行位与逻辑运算,从两个表达式取对应的位。当且仅当输入表达式中两个位(正在被解析的当前位)的值都为 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_valueA)的二进制表示形式是 0000 0000 1010 1010。75(b_int_valueB)的二进制表示形式是 0000 0000 0100 1011。对上述两个值执行“位与”运算将产生二进制结果 0000 0000 0000 1010,即十进制数 10。

(A & B)
0000 0000 1010 1010
0000 0000 0100 1011
-------------------
0000 0000 0000 1010
原文地址:https://www.cnblogs.com/axyz/p/1984030.html