一、系统函数
1.聚合函数
聚合函数常用于GROUP BY子句,在SQL Server 2008提供的所有聚合函数中,除了COUNT函数以外,聚合函数都会忽略空值
AVG、COUNT、COUNT_BIG、MAX 、MIN、SUM......
2.数学函数 ABS ROUND FLOOR CEILING......
3.字符串函数 LEFT LEN LOWER LTRIM REPLACE RIGHT......
4.日期和时间函数 DATEADD DATEDIFF DATENAME DATEPART DAY MONTH YEAR GETDATE
5.其它:
ISNULL :SELECT AVG(ISNULL(Weight, 50))FROM Production.Product
COALESCE:返回其参数中第一个非空表达式 SELECT Name, COALESCE(Class, Color, ProductNumber) AS FirstNotNull FROM Production.Product
二、自定义函数(可在定义returns 类型后可选添加[WITH ENCRYPTION],表明 函数是被加密的,任何人都不能查看该函数的定义)
特点:用户自定义函数则可以出现在一个查询语句的FROM之后
SQL Server 用户定义的函数 与 存储过程 视图的区别:百度文库中的SQL Server 用户定义的函数 与 存储过程 视图的区别
1.标量值函数
create function funTest (@count int)
returns int
as
begin
return @count+100
end
--测试
print dbo.funTest(10)
2.内联表值函数
create function funTest (@id int)
returns table
as
return (select ttt.* from BD_TradeType tty
inner join XH_TodayTradeTable ttt
on tty.TradeTypeId=ttt.TradeTypeId where tty.TradeTypeId=@id
)
--测试
select * from dbo.funTest(1)
3.多语句表值函数
多语句表值函数允许多条语句来创建表的内容。多语句表值函数可以用来替换使用多个步骤来构建结果集的存储过程
CREATE FUNCTION Sales.ufnSalesByCustomerMS (@CustomerID int)
RETURNS @table TABLE
( ProductID int PRIMARY KEY NOT NULL,
ProductName nvarchar(50) NOT NULL,
TotalSales numeric(38,6) NOT NULL,
TotalInventory int NOT NULL )
AS
BEGIN
INSERT INTO @table
SELECT P.ProductID, P.Name, SUM(SD.LineTotal) AS Total, 0
FROM Production.Product AS P
JOIN Sales.SalesOrderDetail SD ON SD.ProductID = P.ProductID
JOIN Sales.SalesOrderHeader SH ON SH.SalesOrderID = SD.SalesOrderID
WHERE SH.CustomerID = @CustomerID
GROUP BY P.ProductID, P.Name;
UPDATE @table
SET TotalInventory = dbo.ufnGetTotalInventoryStock(ProductID);
RETURN;
END;
--测试
SELECT * FROM Sales. ufnSalesByCustomerMS (30052);