sqlserver学习笔记-part2 函数篇

1.日期函数

函数 说明 举例
getdate() 获取当前系统时间
dateadd(datepart,number,date) 以指定日期添加或减去指定的时间间隔,返回新的日期 例如:select dateadd(day,1,‘2021-01-01’)返回值为’2021-01-02’
datediff(datepart,date1,date2) 返回两个日期的时间间隔,可以指定返回年、月、日 例如:select DATEDIFF(day,‘2021-01-01’,‘2021-01-02’,返回值为1)
day(date) 返回日期的天部分 select day(‘2021-02-01’),返回值为 1
month(date) 返回日期的月部分 select month(‘2021-02-01’),返回值为 1
year(date) 返回日期的年部分 select year(‘2021-02-01’),返回值为2021
datepart(datepart,date) 返回指定日期中相应的部分的整数值 select datepart(datepart,date),返回值为2021
eomonth(date,number) 用来返回指定日期之前(number为负数)或之后(number为正数)某个月的最后一天的日期。 select eomonth(‘2021-01-01’,1),返回值为 2021-02-28

当结果超出整数值范围,datediff会产生错误,对于毫秒,最大数是24天20小时31分钟零23.647秒。对于秒,最大数是68年。

2.字符串函数

函数 说明 举例
left(str,length) 返回从左边开始截取一定长度的字符串 select left(‘ABH222’,3),返回值为ABH
right(str,length) 返回从右边开始截取一定长度的字符串 select right(‘ABH222’,3),返回值为222
ltrim(str) 清空字符串最左边存在的空格 select ltrim(’ ABH222’),返回值为 ABH222
rtrim(str) 清空字符串最左边存在的空格 select rtrim(’ ABH222 '),返回值为 ABH222
upper(str) 返回字符串的大写 select upper(‘ABCDefg’) ,返回值为 ABCDEFG
lower(str) 返回字符串的小写 select lower(‘ABCDefg’) ,返回值为 abcdefg
reverse(str) 返回字符串值的逆向值 select reverse(‘1265890’) ,返回值为 0985621
charindex(需要查找位置的子字符串,父字符串,从哪个位置开始找) 返回被查找的子字符串在父字符串中最开始出现的位置 select charindex(‘4’,‘1234’,1),返回值为 4
patindex(%需要查找的子字符串%,父字符串) 返回指定表达式中模式第一次出现的开始位置,子字符串可使用通配符%,而上面的charindex则不可以 select patindex(‘王者’,‘222王者荣耀’),返回值为0;select patindex(’%王者%’,‘222王者荣耀’),返回值为4
substring(字符串,起始下标,长度) 返回从某个位置开始截取一定长度的字符串 select substring(‘王者’,1,2) ,返回值为王者
stuff(字符串,开始下标,截取长度,插入的字符串) 在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符串 select stuff(‘王者’,2,1,‘者荣耀’) ,返回值为王者荣耀
replace(指定字符串,需要被替换的字符串,替换为的字符串) 返回一个新字符串 select replace(‘王者’,‘者’,‘者荣耀’) ,返回值为王者荣耀
replicate(需要重复的字符串 ,重复次数) 返回以指定的次数重复的字符串值 select replicate(‘王者’,2) ,返回值为王者王者
string_agg(columnname,separator)within group(order by columnname) string_agg()是一个聚合函数,它将由指定的分隔符分隔将字符串行连接成一个字符串。 并且不会在结果字符串的末尾添加分隔符。常和group by一起搭配使用。within group子句指定连接结果的排序顺序。在mysql中同等函数为group_concat() select string_agg(name,’,’)within group(order by NAME) from sys.columns group by object_id

for xml path与string_agg 语法如下:
sqlserver学习笔记-part2 函数篇_第1张图片
sqlserver学习笔记-part2 函数篇_第2张图片

3.数据类型转换函数

函数 说明
cast(expression as data_type(length) )as datatype) expression 为需要转换的值。data_type(length) 规定目标数据类型
convert(data_type(length),to_be_converted,style) data_type(length) 规定目标数据类型(带有可选的长度)。o_be_converted 值需要转换的值。style 规定日期/时间的输出格式

4.聚合函数

函数 说明 举例
max(expression) 求最大值
min(expression) 求最小值
sum(expression) 求和
avg(expression) 求平均值
count(expression) 计数,count(columnname)和count(*)的区别是:前者不会把null值计入,后者会
grouping(expression) 判断是否聚合 GROUP BY 列表中的指定列表达式。 在结果集中,如果 GROUPING 返回 1 则表示聚合;返回 0 则表示不聚合。 SELECT SalesQuota, SUM(SalesYTD) ‘TotalSalesYTD’, GROUPING(SalesQuota) AS ‘Grouping’ FROM Sales.SalesPerson GROUP BY SalesQuota WITH ROLLUP;–with rollup返回总计行,grouping可以识别该行,返回1。

5.分析函数

函数 说明 举例
lead(columnname,offset,default) over(partition by …order by …) 取出同一字段的后N行(offset偏移量)的数据 select lead(name,1) over(partition by id order by createdate)
lag(columnname,offset,default) over(partition by …order by …) 取出同一字段的前N行(offset偏移量)的数据 select lag(name,1) over(partition by id order by createdate)
row_number() over(partition by …order by …) 给当前行数据排编号(即编号都是唯一的) select row_number() over(partition by id order by createdate desc) from a表
rank() over(partion by …order by …) 给当前行数据排名(跳跃排名),如a=b>c,则a排名为1,b排名为1,c排名为3 select rank() over(partition by id order by createdate desc)from a表
dense_rank() over(partion by …order by …) 给当前行数据排名(密集排名,即非跳跃排名),如a=b>c,则a排名为1,b排名为1,c排名为2 select dense_rank() over(partition by id order by createdate desc)from a表
cume_dist()over( partion by …order by …) 计算一个值在一组值中的累积分布。返回值的范围为 0 < cume_dist<= 1。计算方法为:在分组中小于等于当前值的行数/当前分组的总行数。
percent_rank()over( partion by …order by …) 计算一个值在一组值中的累积分布。返回值的范围为 0 < percent_rank<= 1。计算方法为:计算方法为(相对位置-1)/(总行数-1)
last_value()over(partion by …order by …) 返回范围内的最后一个值
first_value()over(partion by …order by …) 返回范围内的第一个值

first_value()/last_value()的使用方法如下:sqlserver学习笔记-part2 函数篇_第3张图片

你可能感兴趣的