sql自定义函数大全


CREATE FUNCTION [dbo].[f_AddYears]
(
---增加年
@currentDay DATETIME ,
@years INT
)
RETURNS DATETIME
AS
BEGIN
RETURN DATEADD(year,@years,@currentDay)
END


--增加月
CREATE FUNCTION [dbo].[f_AddMonths]
(
---增加月
@currentDay DATETIME ,
@months INT
)
RETURNS DATETIME
AS
BEGIN
RETURN DATEADD(month,@months,@currentDay)
END

--增加日
CREATE FUNCTION [dbo].[f_AddDays]
(
---增加日
@currentDay DATETIME ,
@days INT
)
RETURNS DATETIME
AS
BEGIN
RETURN DATEADD(day,@days,@currentDay)
END

----增加秒数
CREATE FUNCTION [dbo].[f_AddSeconds]
(
---增加秒数
@currentDay DATETIME ,
@seconds INT
)
RETURNS DATETIME
AS
BEGIN
RETURN DATEADD(ss,@seconds,@currentDay)
END

---返回日期部分
CREATE FUNCTION [dbo].[f_getDate] ( ---返回日期部分
@currentDay DATETIME )
RETURNS DATETIME
AS
BEGIN
RETURN CONVERT(DATETIME,CONVERT(CHAR(08),@currentDay,112))
END

--返回日期的结束时间
CREATE FUNCTION [dbo].[f_getEndTime] ( ---返回日期的结束时间
@currentDay DATETIME )
RETURNS DATETIME
AS
BEGIN
RETURN dbo.[f_AddSeconds](dbo.f_getDate(@currentDay),24*60*60-1)
END


--字符串拆分
CREATE FUNCTION [dbo].[f_split]
(
@string VARCHAR(MAX) ,
@separator CHAR
)
RETURNS @return TABLE ( value VARCHAR(200) )
AS
BEGIN
DECLARE @len INT
SET @len = LEN(@string)
IF ( SUBSTRING(@string, @len, 1) <> @separator )
SET @string = @string + @separator
DECLARE @strtemp VARCHAR(200)
DECLARE @index1 INT
DECLARE @index2 INT
SET @index1 = 0
SET @index2 = CHARINDEX(@separator, @string, 1)

WHILE @index2 <> 0
BEGIN
SET @strtemp = SUBSTRING(@string, @index1 + 1,
@index2 - @index1 - 1)
INSERT @return
( [value] )
VALUES ( @strtemp )
SET @index1 = @index2
SET @index2 = CHARINDEX(@separator, @string, @index1 + 1)
END
RETURN
END

--MD5加密
CREATE FUNCTION [dbo].[f_md5]
(
@string VARCHAR(MAX), --加密字符串
@WhatBit INT --位数
)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @order VARCHAR(50)
SET @order = RIGHT(sys.fn_VarBinToHexStr(hashbytes('MD5', CAST(@string AS VARCHAR(MAX)))), @WhatBit);
RETURN (@order)--分割的后字符串
END


---获取后字符串
CREATE FUNCTION [dbo].[f_splitString]
(
@string VARCHAR(MAX) ,--要分割的字符串
@splitChar VARCHAR(10)--分割字符
)
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @order VARCHAR(20)
SET @order = SUBSTRING(@string,
CHARINDEX(@splitChar, @string) + LEN(@splitChar),
LEN(@string) - CHARINDEX(@splitChar, @string)
- ( LEN(@splitChar) - 1 )) ;
RETURN (@order)--分割的后字符串
END

--转义字符转换
CREATE FUNCTION [dbo].[fun_ReplaceKey] ( @key VARCHAR(MAX) )
RETURNS VARCHAR(MAX)
AS
BEGIN
SET @key = REPLACE(@key, '<', '<')
SET @key = REPLACE(@key, '<=', '<=')
SET @key = REPLACE(@key, '>', '>')
SET @key = REPLACE(@key, '>=', '>=')
SET @key = REPLACE(@key, '&', '''')
SET @key = REPLACE(@key, '"', '\"')
SET @key = REPLACE(@key, '', '\r\n')
RETURN @key
END

---获取分割字符串个数
CREATE FUNCTION [dbo].[GetSplitLength]
(
@String NVARCHAR(MAX) , --要分割的字符串
@Split NVARCHAR(10) --分隔符号
)
RETURNS INT
AS
BEGIN
DECLARE @location INT
DECLARE @start INT
DECLARE @length INT
SET @String = LTRIM(RTRIM(@String))
SET @location = CHARINDEX(@split, @String)
SET @length = 1
WHILE @location <> 0
BEGIN
SET @start = @location + 1
SET @location = CHARINDEX(@split, @String, @start)
SET @length = @length + 1
END
RETURN @length
END


--获取分割字符串的定位字符
CREATE FUNCTION [dbo].[GetSplitOfIndex]
(
@String NVARCHAR(MAX) , --要分割的字符串
@split NVARCHAR(10) , --分隔符号
@index INT --取第几个元素
)
RETURNS NVARCHAR(1024)
AS
BEGIN
DECLARE @location INT
DECLARE @start INT
DECLARE @next INT
DECLARE @seed INT

SET @String = LTRIM(RTRIM(@String))
SET @start = 1
SET @next = 1
SET @seed = LEN(@split)

SET @location = CHARINDEX(@split, @String)
WHILE @location <> 0
AND @index > @next
BEGIN
SET @start = @location + @seed
SET @location = CHARINDEX(@split, @String, @start)
SET @next = @next + 1
END
IF @location = 0
SELECT @location = LEN(@String) + 1

RETURN SUBSTRING(@String,@start,@location-@start)
END

转载于:https://www.cnblogs.com/zengtianli/p/8625290.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
收集整理的SQL Server自定义函数,原文地址:http://blog.csdn.net/maco_wang 1.去除字符串中的html标记及标记中的内容 2 2. 去除字符串中连续的分割符 4 3.求第一个字符串中第二个串的个数 6 4.综合模糊查询 6 5.将十进制转成十六进制 8 6.求两个字符串中相同的汉字及字母的个数 10 7.生成n位随机字符串 11 8.取出字符串中的汉字、字母或是数字 14 9.根据字符分割字符串的三种写法 16 10.将数字转换千分位分隔形式 18 11.取汉字首字母的两个函数 20 12.根据身份证得到生日函数 23 13.根据身份证计算性别函数 24 14.将身份证的15位号码升级为18位 25 15.通过身份证获得户籍 27 16.多个数据项的字符串取指定位置字符 28 17.中缀算术转后缀算术表达式并计算的函数 29 18.人民币小写金额转大写 32 19.向左填充指定字符串 36 20.将整型数字转换为大写汉字 39 21.检查给定串是否存在于由区间及点集的结合内 39 22.根据日期返回星座 41 23.计算两个日期之间的工作日 43 24.根据年月生成日历函数 44 25.从第一个汉字开始分割字符串 47 26.过滤掉字符串中重复的字符 47 27.根据日期得到星期的函数 48 28.根据年度判断是否是闰年 49 29.完善SQL农历转换函数 50 30.自定义函数实现位操作 58 31.求某段时间内星期几的天数 61 32.根据进舍位或四舍五入来求值 63 33.字符串转成16进制函数 64 34.去掉字段中多个带区号电话号码前面的区号 65 35.SQL2000/2005字符串拆分为列表通用函数 67 36.求字符串中汉字的个数 69 37.根据年月得到当月的天数 71 38.全角半角转换函数 71

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值