1.自定义函数:
sql
CREAT FUNCTION [dbo].[GetVisitTypeCode]
(
@VisitTimeAndType VARCHAR(40)
)
RETURNS VARCHAR(2)
AS
BEGIN
DECLARE @VisitTypeName varchar(10),@VisitTypeCode varchar(2),@VisitTimeAndType1 VARCHAR(40)
IF @VisitTimeAndType IS NOT NULL
BEGIN
SET @VisitTimeAndType1=(SELECT REPLACE(@VisitTimeAndType,')',''))
SET @VisitTypeName=(SELECT substring(@VisitTimeAndType1,12,13))
END
ELSE SET @VisitTypeName=' '
IF @VisitTypeName='门诊'
SET @VisitTypeCode=1
ELSE IF @VisitTypeName='家庭'
SET @VisitTypeCode=2
ELSE IF @VisitTypeName='电话'
SET @VisitTypeCode=3
ELSE
SET @VisitTypeCode=' '
RETURN @VisitTypeCode
END
2.调用自定义函数:
sql
Select GetVisitTypeCode('2024-01-23(家庭)') 输出结果:1
3.sqlserver中的replacce()函数的使用
基本语法:replace(str,被替换的字符串,将要替换的字符串)
例子:将"'2024-01-23(家庭)"的后小括号去掉(即小括号:替换成空字符)
sql
Select replace('2024-01-23(家庭)',')','')
输出结果为:2024-01-23(家庭
4.sqlserver使用substring()函数
基本语法:
substring(字符串,startIndex,endIndex)
注意1:substring的index从1开始
注意2:substring的startIndex,endIndex都是闭空间
注意3:sqlserver使用substring()函数进行字符串截取,不能正常识别后括号(小括号)
例如:
sql
substring('2024-01-23(家庭)',12,13)
//输出结果:家庭)
注意4:substring截取的字符串不能为空
2.自定义函数的表值函数
表值函数分为内联表值函数和多行表值函数
(1)、内联表值函数
首先,创建一个测试表格USER,包含ID、birthday和age三个列。
sql
--创建表格
CREATE TABLE USER
(
id INT PRIMARY KEY,
birthday DATE,
age INT
);
--插入一些数据
INSERT INTO USER(id, birthday , age)
VALUES (1, '2022-01-01', 21),
(2, '2022-01-02', 20),
(3, '2022-01-03',33),
(4, '2022-01-04', 23),
(5, '2022-01-05', 22);
接下来,创建一个内联表值函数GetUserByDateRange,接收两个日期参数@StartAge和@EndAge,返回指定年龄范围内的用户信息。
sql
CREATE FUNCTION GetUserByDateRange
(
@StartAge,
@EndAge
)
RETURNS TABLE
AS
RETURN
(
SELECT id, birthday, age
FROM Orders
WHERE age>= @StartAge AND age<= @EndAge
);
最后,使用内联表值函数GetUserByDateRange查询指定年龄范围内的用户信息:
sql
SELECT *
FROM GetUserByDateRange(20, 25);