日期:2014-05-19  浏览次数:22817 次

Microsoft SQL Server 自定义函数整理大全--【叶子】
SQL SERVER函数是由一个或多个 Transact-SQL 语句组成的子程序,可用于封装代码以便重新使用。

SQL SERVER中是允许有自定义函数的,Microsoft SQL Server 并不将用户限制在定义为 Transact-SQL 语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。

尽管自定义函数在数据量庞大的时候,效率上有欠缺,但是在中小型数据库中,还是可以使用,现将我数据库中所有的自定义函数与大家分享,并搜集了CSDN帖子中出现的一些自定义函数进行整理测试,例如fredrickhu (小F) 、dawugui (爱新觉罗.毓华) 、happyflystone (无枪狙击手)、dobear_0922 (do熊) 、cson_cson等等C友们分享或是原创的一些函数。

 

01、去除字符串中的html标记及标记中的内容

02、去除字符串中连续的分割符

03、求第一个字符串中第二个串的个数

04、综合模糊查询

05、将十进制转成十六进制

06、求两个字符串中相同的汉字及字母的个数

07、生成n位随机字符串

08、取出字符串中的汉字、字母或是数字

09、根据字符分割字符串的三种写法

10、将数字转换千分位分隔形式

11、取汉字首字母的两个函数

12、根据身份证得到生日函数

13、根据身份证计算性别函数

14、将身份证的15位号码升级为18位

15、通过身份证获得户籍

16、多个数据项的字符串取指定位置字符

17、中缀算术转后缀算术表达式并计算的函数

18、人民币小写金额转大写

19、向左填充指定字符串

20、将整型数字转换为大写汉字

在此征集常用的SQL SERVER 自定义函数,望广大C友跟帖,我会整理后与大家分享...

持续更新地址:http://blog.csdn.net/maco_wang/archive/2011/03/19/6261639.aspx

------解决方案--------------------
SQL code
发一个石头的:
------------------------------------

-- Author: happyflystone   

-- Date:2009-07-20 

-- Parameter: @CardString 被查询的串,形如:13300000000-13300001234,13300002230,13300002300

--            @CardNo     要查询的串

-- Return   : int      0 -- 不存在于搜索串的范围内

--                     1 -- 存在于

-- 转载请注明出处。更多请访问: http://blog.csdn.net/happyflystone

------------------------------------

Create function IsInCardString(@CardString varchar(8000),@CardNo varchar(11)) 

returns int

as

begin

    declare @temp table(a varchar(200))

     

    declare @i int

    

    set @CardString = rtrim(ltrim(@CardString))+','

    set @i = charindex(',', @CardString)

    

    while @i >= 1

    begin

        insert @temp values(left(@CardString, @i - 1))

        

        set @CardString = substring(@CardString, @i + 1, len(@CardString) - @i)

        set @i = charindex(',', @CardString)

    end

    

    if exists(select 1

    from (

           select case when charindex('-',a) > 0 then left(a,11) else a end as s,

           case when charindex('-',a) > 0 then right(a,11) else a end as e

           from @temp

              ) a

    where @CardNo between s and e)

              set @i= 1

    else 

        set @i= 0

    return @i

end

go

 

 

declare @CardString varchar(1000)

set @CardString = '13300000000-13300001234,13300002230,13300002300,13300002302,13300004101-13300004204,13300004212,13300004310'

 

declare @CardNo varchar(1000)

set @CardNo = '13300000001' --存在

select dbo.IsInCardString(@CardString,@CardNo)

set @CardNo = '13300001235'  --不存在

select dbo.IsInCardString(@CardString,@CardNo)

/*

 

            

----------- 

1

 

(所影响的行数为 1 行)

 

            

----------- 

0

 

(所影响的行数为 1 行)

 

*/

 

drop function IsInCardString



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/happyflystone/archive/2009/07/21/4365264.aspx

------解决方案--------------------
SQL code
create function udf_GetStar (@ datetime)
RETURNS varchar(100)
-- 返回日期所属星座
BEGIN
RETURN
(
--declare @ datetime
--set @ = getdate()
select max(star)
from
(
select '魔羯座' as star,1 as [month],1 as [day]
union all select '水瓶座',1,20
union all select '双鱼座',2,19
union all select '牡羊座',3,21
union all select '金牛座',4,20
union all select '双子座',5,21
union all select '巨蟹座',6,22
union all select '狮子座',7,23
union all select '处女座',8,23
union all select '天秤座',9,23
union all select '天蝎座',10,24
union all select '射手座',11,22
union all select '魔羯座',12,22
) stars
where dateadd(month,[month] - 1,dateadd(year,year(@) - year(0),0)) + [day] - 1 =
(
select max(dateadd(month,[month] - 1,dateadd(year,year(@) - year(0),0)) + [day] - 1)
from (
select '魔羯座' as star,1 as [month],1 as [day]
union all select '水瓶座',1,20
union a