标量值函数
1:字符串拼接函数
-- Author: wyq
-- Create date: 2019年11月18日 14:14:06
-- Description: 测试标量值函数
-- =============================================
IF OBJECT_ID('Function_Name','FN') IS NOT NULL
BEGIN
DROP FUNCTION Function_Name;
END
GO
CREATE FUNCTION Function_Name(@Parm NVARCHAR(10))
RETURNS NVARCHAR(20) --函数返回值类型
AS
BEGIN
--SQL编写
DECLARE @ResultVar NVARCHAR(20);
SET @ResultVar='你好:'+@Parm;
RETURN @ResultVar;
END
GO
--执行
--SELECT dbo.Function_Name('小米')

2:数值相加函数
if (object_id('fun_add', 'fn') is not null)
drop function fun_add
go
create function fun_add(@num1 int, @num2 int)
returns int
with execute as caller
as
begin
declare @result int;
if (@num1 is null)
set @num1 = 0;
if (@num2 is null)
set @num2 = 0;
set @result = @num1 + @num2;
return @result;
end
go
表值函数
1:字符串分隔函数
-- Author: wyq
-- Create date: 2019年11月18日 14:14:06
-- Description: 测试表值函数
-- =============================================
IF OBJECT_ID('Fun_SpitString','TF') IS NOT NULL
BEGIN
DROP FUNCTION Fun_SpitString;
END
GO
/*按照符号分割字符串*/
CREATE FUNCTION [dbo].[Fun_SpitString](@String VARCHAR(2000),@SplitChar VARCHAR(2))
RETURNS @Tem TABLE(ID INT IDENTITY(1,1),Value NVARCHAR(200))
AS
BEGIN
WHILE(CHARINDEX(@SplitChar,@String)<>0)--还有分隔符进入循环体
BEGIN
INSERT INTO @Tem(Value)
VALUES (SUBSTRING(@String,1,CHARINDEX(@SplitChar,@String)-1))--裁剪字符串从第一个到分隔符处不包含分隔符
SET @String = STUFF(@String,1,charindex(@SplitChar,@String),'') --相当于切割字符
END
INSERT @Tem(Value) VALUES (@String)
RETURN
END
/*测试
select * from dbo.[Fun_SpitString]('L,M,N,O,P',',')
*/

查看自定义函数
select definition,* from sys.sql_modules m join sys.objects o on m.object_id = o.object_id
and type in('fn', 'if', 'tf');
内置函数
--用的函数
--CHARINDEX(expressionToFind,expressionToSerach,[start_position])
--表示从expressionToSerach中找到第一个expressionToFind的位置
SELECT CHARINDEX(',','A,B,C,D'); --返回2标识,在第二个字符位置
--SUBSTRING(expression,start_position,length)
--表示从expression的start_position位置后的length个字符切出
SELECT SUBSTRING('A,B,C,D',1,CHARINDEX(',','A,B,C,D')-1) --返回A,切出第一个分隔符前的值
-- STUFF(expression1,start_position,length,expression2)
--表示从expression1的start_position位置后的length个字符用expression2替换
SELECT STUFF('A,B,C,D',1,2,'') --返回B,C,D