撰写时间:2022 年 6 月 8日
SQL Server 函数
SQL中包含以下几种类型的函数:
1、聚合函数:返回汇总值。
2、类型转换函数:将一种数据类型转换为另一种。
3、日期函数:处理日期和时间。
4、数学函数:执行算术运算。
5、字符串函数:对字符串、二进制数据或表达执行操作。
6、系统函数:从数据库返回在SQL Server中的值、对象或设置的特殊信息。
一、聚合函数:
它对其应用的每个行集返回一个值。AVG(表达式) 返回表达式中所有的平均值。仅用于数字列并自动忽略NULL值。返回每个产品类别的平均价格:
SELECT
category_name,
CAST(ROUND(AVG(list_price),2) AS DEC(10,2))
avg_product_price
FROM production.products p
INNER JOIN production.categories c
ON c.category_id = p.category_id
GROUP BY
category_name
ORDER BY
category_name;
COUNT(表达式) 返回表达式中非NULL值的数量。可用于数字和字符列。统计有多少个客户电话
select COUNT(phone) from sales.customers
COUNT(*) 返回表中的行数(包括有NULL值的列)。返回每个品牌和产品数量。 此外,它仅返回产品数量大于 20 的品牌:
SELECT
brand_name,
COUNT() product_count
FROM production.products p
INNER JOIN production.brands c
ON c.brand_id = p.brand_id
GROUP BY brand_name
HAVING
COUNT() > 20
ORDER BY
product_count DESC;
MAX(表达式) 返回表达式中的最大值,忽略NULL值。可用于数字、字符和日期时间列。以下语句获取每个品牌的品牌名称和最高价格:
SELECT
brand_name,
MAX(list_price) max_list_price
FROM production.products p
INNER JOIN production.brands b
ON b.brand_id = p.brand_id
GROUP BY
brand_name
ORDER BY
brand_name;
二、类型转换函数:
把字符串’100.125456’ 转换为 数字类型,保留2位小数
select CONVERT(numeric(10,2) ,‘100.125456’);
把字符串’100.125456’ 转换为 数字类型,保留3位小数
select cast(‘100.125456’ as numeric(10,3))
字符串转时间,返回年
select year(cast(‘2022-03-13 12:00:30’ as date))
三、日期函数:
由于日期不能直接执行算术函数,所以日期函数就十分有用。GETDATE() 当前的系统日期。
select GETDATE() --结果:2019-05-07 18:34:27.343
DATEADD(日期部分,number,date) 返回带有指定数字(number)的日期(date),该数字添加到指定的日期部分(datepart)
select DATEADD(dd, 5, getdate()) --增加5天时间
DATEDIFF(日期部分,date1,date2) 返回两个日期中指定的日期部分之间的差值。
select DATEDIFF(mm, ‘2010-1-1’, ‘2010-3-1 00:00:00’) --结果:2
DATENAME(日期部分,date) 返回日期中日期部分的字符串形式。
select DATENAME(dw,GETDATE()) --结果:星期二
注:DATENAME 和 DATEPART 的区别,返回的值类型不同,一个是VARCHAR一个是INT,另外就是星期会用本地语言来表示
四、数字函数:
对数字值执行代数运算。
ABS(num_expr) 返回数值表达式的绝对值。
select ABs(-1.2) --返回绝对值1.2
FLOOR(num_expr) 返回小于或等于数值表达式的最大整数
select floor(1.2) --返回1
CEILING(num_expr) 返回大于或等于数值表达式的最小整数
select CEILING(1.2) --返回2
RAND([seed]) 随机返回的到0-1之间的近似浮点值,可以对seed指定为整数表达式(可选)。
select round(rand()*40,0)+60 --随机生成60-100的整数
ROUND(num_expr,length) 对数值表达式截取指定的整数长度,返回四舍五入后的值。
select ROUND(list_price,1) from production.products
五、字符串函数:
可用于binary 和varbinary数据类型列,但主要用于char和varchar数据类型。Expr1+expr2 返回两个表达式的组合形式的字符串。注意int类型
select ‘b’+‘a’;
select ‘b’+1;
LEN(char_expr) 返回字符表达式的长度。
select len(‘123456’)
LOWER(char_expr) 将字符表达式全部转换为小写。
select LOWER(‘ABc’)
LTRIM(char_expr) 返回删除掉前面空格的字符表达式。
select LTRIM(’ abc d e’)
六、系统函数:
用于返回元数据或配置设置。COALESCE(expr1,expr2, xprN) 返回第一个非NULL表达式。
select coalesce(null,1,1+1)
select coalesce(2,null,1+2)
select coalesce(null,null,1+2)
DATALENGTH(‘expr’) 返回任何数据类型的实际长度。
select DATALENGTH(‘中’); --2字节
select DATALENGTH(‘A’); – 1字节
ISNULL(expr,value) 使用指定的值替换的NULL表达式。
select isnull(phone,‘unknow’) from sales.customers;
NULLIF(expr1,expr2) Expr1与Expr2相等时,返回Null,否则返回第一个表达式。
select nullIf(len(first_name),len(last_name)) from sales.customers
row_number分页row_number的用途的非常广泛,一般可以用来实现web程序的分页,他会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要用over子句选择对某一列,或者几列进行排序才能生成序号
SELECT * FROM(
SELECT row_number() OVER(
ORDER BY list_price )
AS rowNum, product_id, product_name, list_price
FROMproduction.products ) a
WHERE rowNum > (3 -1) * 10
AND rowNum <= 3 * 10