SQL函数
1.IIF 函数(等于mysql里的if函数)
IF/ELSE 语句是编程中最常用的控制流结构。SQL Server 以 IIF 函数的形式为我们的查询提供 IF/ELSE 语句的功能。
语法:
IIF(expression, value_if_true, value_if_false)
我们可以利用 IIF 函数将电影长度分为三类:Short(短)、Medium(中)和 Long(长),取决于它们的长度。我们将电影长度分类如下:
-
Short:80 分钟以下
-
Medium:80 至 120分钟之间
-
Long:超过 120 分钟
我们使用 IIF() 函数将电影的长度与给定的表达式进行比较,并根据结果返回 1 或 NULL。如果返回 1,则将计入该列标题(Short、Medium 或 Long)下:
2.datediff函数
日期函数,用于计算两个日期的差
datediff(datepart,startdate,enddate)
datepart可以是年(y)月(m)日(d)时(h)等
3.case …when函数
等价于if else语句
语法:
1.
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
2.
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
4.substring 函数
返回SQL Server中的字符、二进制、文本或图像表达式中的一部分。
语法:
substring(expression,start,length)
解释:
start: 指定返回字符的起始位置的整数或bigint表达式。(编号从1开始,意味着表达式中的第一个字符为1)。如果start小于1,则返回的表达式的起始位置为表达式中指定的第一个字符。在这种情况下,返回的字符数是后两者中的较大值:start+length之和减去1,0.如果start大于值表达式中的字符数,将返回一个零长度的表达式
length: 是正整数或用于指定要返回的expression的字符数的bigint表达式。如果length是负数,会生成错误并终止语句。如果start和length的总和大于表达式中的字符数,则会返回从start开始的整个值的表达式
EG:
print SUBSTRING(‘Today is Monday’,2,5)
5.upper()、lower()函数
语法:
upper ( character_expression )
lower( character_expression )
eg:首字母大写:upper(substring(str,1,1))
剩下的小写:lower(substring(str,2,len(str)-1))
窗口函数
1、 排序函数
1、RANK()
在计算排序时,若存在相同位次,会跳过之后的位次。
例如,有3条排在第1位时,排序为:1,1,1,4······
2、DENSE_RANK()
这就是题目中所用到的函数,在计算排序时,若存在相同位次,不会跳过之后的位次。
例如,有3条排在第1位时,排序为:1,1,1,2······
语法:
<窗口函数> OVER ( ORDER BY <排序用列清单> )
聚合函数
1.string_agg函数
将多行结果字符串拼接到一行。(注意:sqlserver的版本需要2017及以上)
语法:
STRING_AGG ( expression, separator )
WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
有2个参数,第1个是要合并的字段、表达式,第2个是用什么分隔符,比如:用逗号作为分隔符。
后面的order 子句,是对要合并的数据进行排序,可以升序、降序