聚合函数
函数名 | 功能 |
---|---|
AVG([ALL|DISTINCT] 表达式) |
返回一组值的平均数,忽略空值 |
COUNT({[ALL|DISTINCT]} 表达式]|*) |
返回组中项数,返回值为INT类型 |
MAX([ALL|DISTINCT] 表达式) |
返回表达式中最大值 |
MIN([ALL|DISTINCT] 表达式) |
返回表达式中最小值 |
SUM([ALL|DISTINCT] 表达式) |
返回表达式中的和,SUM只能用于数字,空值将被忽略 |
ALL:对所有值进行聚合函数,默认就是ALL DISTINCT:去重 聚合函数只能在以下位置作为表达式使用,SELECT语句的选择列表(子查询或者外部查询)中,COMPUTE BY子句中,HAVING子句中
数学函数
函数名 | 功能 |
---|---|
FLOOR(数值表达式) |
向下取整 |
CEILING(数值表达式) |
向上取整 |
字符串函数
函数名 | 功能 |
---|---|
ASCII(字符表达式) |
返回最左侧字符的ASCII码值 |
CHAR(整型表达式) |
将整型ASCII码值转换为字符 |
LEFT(字符表达式,整数) |
截取从左边开始指定个数的字符串 |
RIGHT(字符表达式,整数) |
截取从右边开始指定个数的字符串 |
SUBSTRING(字符表达式,起始点,n) |
截取从起始点开始的n个字符 |
CHARINDEX(字符表达式1,字符表达式2,[开始位置]) |
从指定开始位置起,搜索字符串表达式1在字符串表达式2中的位置,省略开始位置表示从字符串表达式2的开头开始搜索 |
LTRIM(字符表达式) |
去掉左边的空格 |
RTRIM(字符表达式) |
去掉右边的空格 |
REPLICATE(字符表达式,n) |
重复字符串n遍 |
REVERSE(字符表达式) |
反转字符串 |
STR(数字表达式) |
数值转换成字符串 |
LEN(字符表达式) |
返回字符个数不包括尾随空格 |
replace(列名,'要替换的','被替换的') |
替换某列中的某个字符串 |
日期和时间函数
函数名 | 功能 |
---|---|
GETDATE() |
返回系统当前日期和时间 |
DAY(日期) |
返回指定日期的 日 |
MONTH(日期) |
返回指定日期的 月 |
YEAR(日期) |
返回指定日期的 年 |
DATEPART(DATEpart,日期) |
返回指定日期的指定DATEpart的整数 |
DATENAME(DATEpart,日期) |
返回指定日期的指定DATEpart的字符串 |
DATEDIFF(DATEpart,日期1,日期2) |
返回两个日期相隔了多少个指定的DATEpart所指的时间,比如相隔了多少天,多少月,多少年等 |
DATEADD(DATEpart,数值,日期) |
将数值加到日期的指定DATEpart上,返回一个新的DATETIME类型的数据,比如加8年,加20天,加30月 |
例子
SELECT DATEDIFF(yy,'2017-01-28','2021-12-18'),DATEADD(d,20,'2021-12-18')
DATEpart
用于指定要返回日期的组成部分
日期和时间部分 | DATEpart缩写 |
---|---|
year | yy,yyyy |
quarter | qq,q |
month | mm,m |
dayofyear | dy,y |
day | dd,d |
week | wk,ww |
weekday | dw,w |
hour | hh |
minute | mi,n |
second | ss,s |
数据类型转换函数
需要转换数据类型时,用两个函数,CAST或者CONVERT函数进行类型转换
CAST(<表达式> AS <目标数据类型>)
CONVERT(<目标数据类型>,<表达式> [,<日期样式>])
日期样式
年两位数yy | 年4位数yyyy | 输入/输出格式 |
---|---|---|
— | 0或者100 | mm dd yyyy hh:miAM(或者PM) |
1 | 101 | mm/dd/yyyy |
2 | 102 | yy.mm.dd |
3 | 103 | dd/mm/yyyy |
4 | 104 | dd.mm.yy |
5 | 105 | dd-mm-yy |
6 | 106 | dd mm yy |
7 | 107 | mm dd, yy |
8 | 108 | hh:mi:ss |
元数据函数
元数据函数返回有关数据库和数据库对象的信息,所以元数据函数具有不确定性
函数名 | 功能 |
---|---|
COL_LENGTH(表名,列名) | 返回列定义的长度(以字节为单位) |
COL_SNAME(表标识号,列标识号) | 根据指定的表标识号和列标识号返回列的名称 |
DB_SNO([数据库标识号]) | 返回数据库的标识(SNO)号 |
DB_SNAME([数据库的名称]) | 返回数据库名字 |
OBJECT_SNO(对象名,[对象类型]) | 返回架构范围内对象的数据库对象标识号 |
用户自定义函数
用户自定义函数是有一个或者多个T-SQL语句组成的子程序,它由函数名,参数,编程语句和返回值组成。用户自定义函数只能通过返回值返回数据。可以出现在SELECT语句中。
SQL Server用户自定义函数分为两种类型,即标量值函数和表值函数。
- 标量值函数使用RETURN语句返回单个数据值,返回类型可以是除了TEXT,NTEXT,IMAGE,CURSOR和TIMESTAMP外的任何数据类型。
- 表函数返回TABLE数据类型
表值函数又分为内连表值函数和多语句表值函数。
- 内连表值函数没有函数主体,返回的表值是单个SELECT语句的结果集
- 多语句表值函数指在BEGIN…..END之前定义函数主体,其中包含一些列的T-SQL语句这些语句可以生成并将其插入返回的表中
创建标量值函数
形参是变量,变量要加@符号
CREATE FUNCTION <函数名称>(<形参> AS <数据类型> [,...n])
RETURN <返回的数据类型>
AS
BEGIN
函数主体
RETURN 表达式
END
创建内连表值函数
CREATE FUNCTION <函数名称>(<形参> AS <数据类型> [,...n])
RETURN TABLE
AS
RETURN <查询语句>
创建多语句表值函数
表变量名也是变量,要加@符号
CREATE FUNCTION <函数名称>(<形参> AS <数据类型> [,...n])
RETURN <表变量名> TABLE
AS
BEGIN
<SQL语句块>
RETURN
END