函数的组成
函数的目标是返回一个值。大多数函数都返回一个标量值(scalar value),标量值代表一个数据单元或一个简单值。实际上,函数可以返回任何数据类型,包括表、游标等可返回完整的多行结果集的类型。本章不准备讨论到这个深度,本章将讲解如何创建和使用用户自定义函数,以返回更复杂的数据。
函数中使用用户变量
用户变量以@符号开头,用于声明为特定的数据类型。可以使用SET或者SELECT语句给变量赋值
用set给变量赋值 SET @变量名=数值/文本/其他
用select给变量赋值 SELECT @变量名= 数值/文本/其他
嵌套函数
将函数传递给另一个函数
聚合函数
sum 求和
avg 求平均值
min 求最小值
max 求最大值
count 求行数
转换函数
CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。类似函数CONVERT()函数,功能相同,语法不同。
CAST函数语法:CAST(源数据 AS 数据类型)
CONVERT函数语法:CONVERT(数据类型,源数据)(CONVERT()函数还具有一些改进的功能,它可以返回经过格式化的字符串值)
STR()函数:将数字转换为字符串的快捷函数。
日期函数
DATEADD()函数:在日期/时间值上加上日期单位间隔,可以针对年月日相加,在同比环比对比时使用
DATEDIFF()函数:返回两个日期间隔的年份,月份,天数等等
DATEPART()函数,DATENAME()函数:用于返回datetime的日期部分。DATEPART()函数返回一个整型值;DATENAME()函数返回一个包含描述性文字的字符串
GETDATE()函数,GETUTCDATE()函数:返回datetime类型的当前日期与时间。GETUTCDATE()函数使用服务器上的时区设置来求出UTC时间,这和格林威治标准时间或飞行员所说的"祖鲁时"(Zulu Time)是一样的。两个函数都能精确到3.33毫秒。
YEAR(),MONTH()DAY()函数:返回以整数表示的datetime值的日、月、年。
字符串操作函数
ASCII()、CHAR()、UNICODE()、NCHAR()函数:字符和字符的标准数字表示之间转换。
CHARINDEX()PATINDEX()函数:CHARINDEX():返回一个整型值,表示某子字符串的第一个字符在整个字符串中的位置索引,PATINDEX()函数和CHARINDEXO函数类似,它执行相同的操作,但方法稍许不同,该函数增加了对通配符(即Like运算符中使用的字符)的支持。也就是说满足字符模式的索。
Len()函数:LEN()函数用于返回一个代表字符串长度的整型值。
LEFT()与RIGHT()函数:LEFT()函数返回从最右边的字符开始,以从左到左右的顺序返回特定数量的字符。RIGHT正好相反,取的是从最右边的字符开始,以从右到左的顺序返回特定数量的字符。
SUBSTRING()函数:从字符串的一个位置开始,往右数若干字符,返回一个特定长度的子字符串。可以指定特定位置开始计数
LOWER和UPPER函数:将字符串中所有字符分别都转换为小写和大写
LTRIM()和RTRIM()函数:这两个函数分别返回将字符串的左边和右边的空白修剪掉之后的字符串
REPLACE()函数:可以把字符串中的某个字符或某个子字符串替换为另一个字符或者子字符串
REPLICATE()和SPACE()函数:在需要将一些字符重复填充进一个字符串时,REPLCATE()函数时任意符号或者字符填充,SPACE()函数时以空格进行填充
REVERSE()函数:用于将字符串中的字符颠倒过来
STUFF函数:可将字符串中的一部分替换为另一个字符串。
数学函数:
函 数 | 说 明 |
ABS() | 返回一个数的绝对值 |
ACOS() | 计算一个角的反余弦值,以弧度表示 |
ASIN() | 计算一个角的反正弦值,以弧度表示 |
ATAN() | 计算一个角的反正切值,以弧度表示 |
ATN2() | 计算两个值的反正切,以弧度表示 |
CEILING() | 返回大于或等于一个数的最小整数 |
COS() | 计算一个角的正弦值,以弧度表示 |
COT() | 计算一个角的余切值,以弧度表示 |
DEGREES() | 将一个角从弧度转换为角度 |
EXP() | 指数运算 |
FLOOR() | 返回小于或等于一个数的最大整数 |
LOG() | 计算以2为底的自然对数 |
LOG10() | 计算以10为底的自然对数 |
PI() | 返回以浮点数表示的圆周率 |
POWER() | 幂运算 |
RADIANS() | 将一个角从角度转换为弧度 |
RAND() | 返回以随机数算法算出的一个小数, 可以接收一个可选的种子值 |
ROUND() | 对一个小数进行四舍五入运算, 使其具备特定的精度 |
SIGN() | 根据参数是正还是负,返回–1或者1 |
SIN() | 计算一个角的正弦值,以弧度表示 |
SQRT() | 返回一个数的平方根 |
SQUARE() | 返回一个数的平方 |
TAN() | 计算一个角正切的值,以弧度表示 |
排序函数
ROW_NUMBER()函数:ROW_NUMBER()函数根据作为参数传递给这个函数的ORDER BY子句的值,返回一个不断递增的整数值。如果ROW_NUMBER的ORDER BY的值和结果集中的顺序相匹配,返回值将是递增的,以升序排列。如果ROW_NUMBER的ORDER BY子句的值和结果集中的顺序不同,这些值将不会按顺序列出,但它们表示ROW_NUMBER函数的ORDER BY子句的顺序。(aabc 1234)
RANK()、DENSE_RANK()函数:这两个函数与ROW_NUMBER()函数类似,因为它们都返回一个基于ORDER BY子句的值。不过这些值不一定永远是唯一的。排列值对于所提供的ORDER BY子句中的重复结果而言也是重复的,而且唯一性是仅仅基于ORDER BY列表中的唯一值的。
RANK()函数(aabc,1134)
DENSE_RANK()函数(aabc,1123)
NTILE(n)函数:这个函数也用于对结果进行排列,并返回一个整型的排列值,但是它不会对结果以唯一的排列顺序进行枚举,而是将结果切分为有限数量的排列组。