DATEDIFF(datepart,date1,date2) 返回两个日期中指定的日期部分之间的差值。 DATENAME(datepart,date) 返回日期中日期部分的字符串形式。 DATEPART(datepart,date) 返回日期中指定的日期部分的整数形式。 YEAR(date) 返回指定日期的年份数值 MONTH(date)返回指定日期的月份数值 DAY(date)返回指定日期的天数值
注:当显示日期列的内容时如果只显示年月日部分,可以使用CONVERT转换函数对日期列进行转换 CONVERT(VARCHAR(10),日期字段名,120)/*120为日期格式YY-MM-DD
SELECT CONVERT(VARCHAR(10),盘点日期,120) AS 盘点日期 FROM 原材料盘点日期明细表
4、数字函数:对数字值执行代数运算。
ABS(num_expr) 返回数值表达式的绝对值。
ACOS(float_expr) 返回角(以弧度表示),它的余弦值近似于指定的浮点表达式。 ASIN(float_expr) 返回角(以弧度表示),它的正弦值近似于指定的浮点表达式。 ATAN(float_expr) 返回角(以弧度表示),它的正切值近似于指定的浮点表达式。
ATN2(float_expr1, float_expr2) 返回角(以弧度表示),它的正切值在两个近似的浮点表达式之间。 GEILING(num_expr) 返回大于或等于数值表达式的最小整数。
COS(float_expr) 返回以浮点表达式表示的近似于指定角度(以弧度表示)的余弦三角函数的值。 COT(float_expr) 返回以浮点表达式表示的近似于指定角度(以弧度表示)的余切三角函数的值。 DEGREES(num_expr) 返回数值表达式表示的弧度值对应的度值。 EXP(float_expr) 根据指定的近似浮点表达式,返回指数值。 FLOOR(num_expr) 返回小于或等于数值表达式的最大整数 LOG(float_expr) 根据指定的近似浮点表达式,返回自然对数值。
LOG10(float_expr) 根据指定的近似浮点表达式,返回以10为底的对数。 PI() 返回常量值3.141592653589793
POWER(num_expr,y) 返回幂为y的数值表达式的值。
RADIANS(num_expr) 返回数值表达式表示的度值对应的弧度值。
RAND([seed]) 随机返回的0到1之间的近似浮点值,可以对seed指定为整数表达式(可选)。 ROUND(num_expr,length) 对数值表达式截取指定的整数长度,返回四舍五入后的值。 SIGN(num_expr) 对正数执行+1操作,对负数和零执行-1操作。
SIN(float_expr) 返回以浮点表达式表示的近似于指定角度(以弧度表示)的正弦三角函数的值。 SQUARE(float_expr) 返回浮点表达式的平均值。 SQRT(float_expr) 返回指定的近似浮点表达式的平方根。
TAN(float_expr) 返回以浮点表达式表示的近似于指定角度(以弧度表示)的正切三角函数的值。 5、字符串函数:可用于binary 和varbinary数据类型列,但主要用于char和varchar数据类型。 Expr1+expr2 返回两个表达式的组合形式的字符串。
ASCⅡ(char_expr) 返回表达式最左边字符的ASCⅡ代码值。
CHAR(int_expr) 返回0到255之间的整数表达式的ASCⅡ字符值。如果输入的值不在有效范围内,则返回NULL。
CHARINDEX(?pattern?,char_expr) 返回字符表达式中指定模式的起始位置。
DIFFERENCE(char_expr1,char_expr2) 根据比较两个字符表达式的相似度,返回1到4之间的值。4表示匹配度最佳。
LEN(char_expr) 返回字符表达式的长度。
LOWER(char_expr) 将字符表达式全部转换为小写。 LTRIM(char_expr) 返回删除掉前面空格的字符表达式。
PATINDEX(?%pattern%?,expr) 返回表达式中模式第一次出现的起始位置。返回0表示不存在模式形式。
REPLICATE(char_expr,int_expr) 返回重复指定次数的字符表达式产生的字符串。 REVERSE(char_expr) 反转字符表达式。
RIGHT(char_expr,int_expr) 返回从字符表达式最右端起根据指定的字符个数得到的字符。 RTRIM(char_expr) 返回删除掉其后空格的字符表达式。
SOUNDEX(char_expr) 评估两个字符串的相似度后得到的4位代码。 SPACE(int_expr) 返回包含指定空格数的字符串。
STR(float_expr[,length[,decimal]]) 返回浮点表达式的字符串表示法。
STUFF(char_expr1,start,length,char_expr2)使用字符表达式2替换字符表达式1的一部分字符,从指定的位置开
始替换指定的长度。
SUBSTRING(char_expr,start,length) 返回从字符表达式的指定位置开始,截取指定长度得到的字符集。
UPPER(char_expr) 将字符表达式全部转换为大写。 6、系统函数:用于返回元数据或配置设置。
COALESCE(expr1,expr2, xprN) 返回第一个非NULL表达式。 COL_LENGTH(?table_name?,?column_name?) 返回列的长度。 COLNAME(table_id,column_id) 返回指定的表中的列名。 DATALENGTH(?expr?) 返回任何数据类型的实际长度。 DB_ID([?database_name?]) 返回数据库的标识号。 DB_NAME([database_id]) 返回数据库的名称。
GETANSINULL([?database_name?]) 返回数据库的默认空性(Nullability)。 HOST_ID() 返回工作站的标识号。 HOST_NAME() 返回工作站的名称。
IDENT_INCR(?table_or_view?) 有新的记录添加入到表中时计数加1。 IDENT_SEED(?table_or_view?) 返回标识列的起始编号。 INDEX_COL(?table_name?,index_id,key_id) 返回索引的列名。 ISNULL(expr,value) 使用指定的值替换的NULL表达式。 NULLIF(expr1,expr2) Expr1与Expr2相等时,返回Null。 OBJECT_ID(?obj_name?) 返回数据库对象标识号。 OBJECT_NAME(?object_id?) 返回数据库对象名。
STATS_DATE(table_id,index_id) 返回上次更新指定索引的统计的日期。 SUSER_SID([?login_name?]) 返回用户的登录标识号。
SUSER_ID([?login_name?]) 返回用户的登录标识号。这个函数类似于SUSER_SID()函数,并且保留了向后的兼容性。
SUSER_SNAME([server_user_id]) 返回用户的登录标识号。
SUSER_NAME([server_user_id]) 返回用户的登录标识号。这个函数类似于SUSER_SNAME()函数,并且保留了向后的兼容性。
USER_ID(?user_name?) 返回用户的数据库标识号。 USER_NAME([?user_id?]) 返回用户的数据库名称。
7、文本和图像函数:通常返回有关文本和图像数据所需的信息。文本和图像数据是以二进制格式的形式进行存储的。
TEXTPTR(col_name) 返回varbinary格式的文本指针值。对文本指针进行检查以确保它指向第一个文本页。
TEXTVALID(?table_name.col_name?,text_ptr)检查给定的文本指针是否有效。返回1表示有效,返回0表示指针无效。
第六节 增、删、改表数据
一、插入数据:可以使用不同的INSERT语句向表或视图添加全部列数据或只带一部分列数据的行。 1、插入单行:
语法:Insert into 表名 (字段清单)values (列值) 实例:insert into student values(4,?mike?,5,?男?) 2、 插入多行:
语法:Insert into 表名 select 语句
实例:Create table stu(sno varchar(10),sname varchar(10),class int,sex char(2)) Insert into stu select * from student
二、修改数据:可以使用UPDATE语句对以前添加到表中的数据进行修改。
UPDATE语句用来更改现有行中的数据,可以是添加新数据,也可以是修改现有的数据。 语法:Update 表名 set 字段1=列值1,字段2=列值2,……字段n=列值n where 条件
实例: insert into student values(5,'jack',6,'男') select * from student;
update student set class=5 where stuno=5 select * from student;
三、删除表中的数据:可以使用DELETE语句删除不在起作用的数据。 语法:Delete from 表名 where 条件
实例:Delete from student where stuno=5 如果字段内容为NULL
DELETE FROM STUDENT WHERE STUNO IS NULL
第七节 使用COMPUTE和COMPUTE BY对数据进行汇总
COMPUTE子句使用聚合函数生成数据的汇总值。COMPUTE和COMPUTE BY子句之间的区别在于COMPUTE不仅显示汇总的信息,还显示详细信息。生成的汇总值显示为另一行。这样在同一结果集就可以同时看到详细信息行与汇总行。COMPUTE支持使用聚合函数AVG、COUNT、MIN、MAX和SUM。 语法:Select 列名1,列名2……列名n from 表名 order by列名1
compute [by] 函数名(列名2) 实例:
a、 Use pubs
select type,price from titles order by type compute avg(price)
b、select type,advance from titles where type='business' or type='trad_cook' order by type
compute sum(advance) by type 注意:
a)不允许DISTINCT关键字与行聚合函数一起使用。
b)COMPUTE子句中使用的列名必须出现在语句的选择列表中。
c)同一个语句中不能同时出现SELECT INTO和COMPUTE子句,这是因为包含COMPUTE的语句是以另一
个结构生成行。
d)如果使用COMPUTE BY,就必须同时使用ORDER BY子句。列于COMPUTE BY后的列必须等同于 ORDER BY 后出现的列或是ORDER BY 后的子集。它们必须具有相同的从左到右的顺序,从同一 个表达式开始,并且不能跳过任何表达式。
第八节 操作符
1.ROLLUP 操作符:使用Rollup操作符可以创建Group by 子句内元素的分类汇总和汇总。 它支持累计聚合,如求和和求平均。它反映了Group by 子句中使用的列和表达式的位置。 实例: Use pubs go
Select stor_id,title_id,sum(qty) as 'total quantity' from sales group by stor_id,title_id with rollup
2.CUBE操作符(交叉汇总):使用CUBE操作符可以返回Group by 子句中每个元素的分类汇总。 CUBE产生超聚合行,即由Group by 子句生成的行的信息的汇总。通过创建Group by 子句中 列列表的所有可能的分组组合,生成超聚合行。 实例: Use pubs go
Select stor_id,title_id,sum(qty) as 'Total quantity' from sales group by stor_id,title_id with cube 注意:
a)使用CUBE时不支持使用具有Distinct特性的聚合函数,如COUNT(DISTINCT column)。 b)使用CUBE时,Group by 子句中最多可使用10列或10个表达式。 c)不支持Group by All。 第九节 联接
进行查询时,可以联接多个表来执行相关的查询,通常,我们用一个公用列来联接表,经常是指定一列的主键和外键关系。
可以有两种方式来联接表。首先,可以在WHERE子句中指定联接条件。这是以前联接表的方式,但现在仍然支持。如果使用SQL很久了,可能会习惯 这种方法。也可以通过FROM子句指定联接条件。 下面列出了SQLSERVER支持的连接类型: 联接类型 描述
CROSS 返回联接类型左右两侧的表中的所有行的所用组合。即笛卡尔积。 INNER 返回联接类型左侧表和右侧表中有相同值的所有行。
LEFT OUTER 返回左侧表中的所有行,以及与左侧表相匹配的右侧表中的那些行。如果不存在匹配,就在该字段以null值替代。
RIGHT OUTER 返回右侧表中的所有行,以及与右侧表相匹配的左侧表中的那些行。如果不存在匹配,就在该字段以null值替代。
FULL OUTER 返回左右两侧表中的所有行。它们完全相同,就输出两遍,否则就根据需要填以null值。 Self 类似于INNEER JOIN ,只是左右两侧的表为同一个表。
1.内联接(Inner join):两表组合常用方法,经常采用主键和外键匹配的形式。 实例: Select huowu.hwid,hwname,ddid,hwje from huowu join dingdan on huowu.hwid=dingdan.hwid
左外联接(LEFT OUTER JOIN):左边的表不加限制。 右外联接(RIGHT OUTER JOIN):右边的表不加限制。
2.外联接(Outer join): 全外联接(FULL OUTER JOIN):不受条件约束,显示两表中所有内容。 实例:Select huowu.hwid,hwname,ddid,hwje from huowu left outer join dingdan on huowu.hwid=dingdan.hwid
3.交叉联接(Cross join):典型的笛卡尔积,没有on。
实例:Select huowu.hwid,hwname,ddid,hwje from huowu cross join dingdan。 4.自联接(Self join):表自身的连接。
实例:Select c1.hwid,c2.hwid,c1.hwname from huowu as c1 join huowu as c2 on c1.hwid=c2.hwid
第十节 在查询的基础上创建表
格式:Select 列名清单 into 新表名 from 旧表名 实例:Select * into newstudent from student
第十一节 子查询
是在其他查询结果的基础上提供一种自然而有效的方式表示WHERE子句的条件。
子查询是一个SELECT语句,它定义在另一个SELECT、INSERT、UPDATE或DELETE语句中或定义在另一个子查询中。
子查询会受到一定限制规则。这些规则为:
1)子查询的选择列表中不能包括文本或图像数据类型。
2)由未修改的比较运算符(不跟有ANY或ALL关键字的一种运算符)引入的子查询不能包括GROUP BY和HAVING子句,因
为这些子查询必须返回单一值。
3)包含GROUP BY子句的子查询不能使用DISTINCT关键字。
4)由比较运算符引入的子查询的选择列表中只能包含一个表达式或一个列名。
5)子查询不能内部地处理它们自己的结果,因为它们不能包含COMPUTE子句、ORDER BY子句或INTO关键字。因为系统
首先通过排序结果消除重复的记录,所以可选的DISTINCT关键字可对不包含GROUP BY 子句的子查询的结果进行有 效排序。
6)使用EXISTS的子查询的选择列表规则等同于那些标准选择列表规则,这是因为使用EXISTS的子查询构成了一个存在
性测试,并且它返回TURE(真)或FALSE(假)值而非数据值。根据惯例,使用EXISTS的子查询的选择列表由有星
号(*)构成而不是单个列名。不要指定多个列。 实例:
a)子查询只返回一行和一列。 Use pubs go
Select title from titles where pub_id=(