Sql Server中常用的6个自定义函数分享

来源:脚本之家  责任编辑:小易  

表值函数这样写(需要先定义一个表,然后向定义的表中插入记录即可) CREATE function dbo.GetPersonTable(@personID int, @needSelf int) returns @table table(fielda int,fieldb varchar(10))--定义返回表结构,要与你后面查询中字段一致 beg

在日常应用中,往往根据实际需求录入一些值,而这些值不能直接使用,所以Sql中经常会对字段值进行一些常规的处理。这里搜集了(提取数字、英文、中文、过滤重复字符、分割字符的方法),方便日后查询使用。  

如果函数没有被加密的话(未使用with encrypt子句),用语句sp_helptext 函数名查看源码。 如果被加密了,也需要通过第三方工具来解密查看。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用

一、判断字段值是否有中文

--加几个Go就可以了use STmodelgocreate function getnum(@n int)RETURNS intasbegin declare @id int select @id = ID from jiagebianhua where id = @n return @idendgodeclare @i intset @i=1while @i

--SQL 判断字段值是否有中文 create function fun_getCN(@str nvarchar(4000)) returns nvarchar(4000) as begin declare @word nchar(1),@CN nvarchar(4000) set @CN='' while len(@str)>0 begin set @word=left(@str,1) if unicode(@word) between 19968 and 19968+20901 set @CN=@CN+@word set @str=right(@str,len(@str)-1) end return @CN end select dbo.fun_getCN('ASDKG论坛KDL') --论坛 select dbo.fun_getCN('ASDKG論壇KDL') --論壇 select dbo.fun_getCN('ASDKDL') --空

创建函数: CREATE FUNCTION fun_getPY ( @str NVARCHAR(4000) ) RETURNS NVARCHAR(4000) AS BEGIN DECLARE @word NCHAR(1),@PY NVARCHAR(4000) SET @PY='' WHILE len(@str)>0 BEGIN SET @word=left(@str,1) SET @PY=@PY+(CASE WHEN unicode(@wo

二、提取数字

create view v_getdateasselect getdate() [output]go--------------------------------------------------------------- create function f_getdate() returns datetimeasbegindeclare @n datetime select @n = output from v_getdatereturn(@n

IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL DROP FUNCTION DBO.GET_NUMBER2 GO CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100)) RETURNS VARCHAR(100) AS BEGIN WHILE PATINDEX('%[^0-9]%',@S) > 0 BEGIN set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'') END RETURN @S END GO --测试 PRINT DBO.GET_NUMBER('呵呵ABC123ABC') GO --123

操控性包含的内容量很大,包括动力、方向指向、回馈、侧倾控制、后轮跟随性、车身形态修复、轮胎抓地力、制动性能……等我简单把开过的几款车评述一下吧!高尔夫四,轴距短,操控灵活,动力后段足,指向好,吸振及侧倾控制不错。山路超级灵活,高速稳定性也好,堪称操控经典。高尔夫七,动力超好,避震太软,轴距过长缺乏灵活,指向精准但侧倾控制不好。算买菜车中操控很好的那种。飞度,避震过软,指向不错,算买菜车中带操控的。马自达6经典款,避震软硬适中,动力不错,过弯侧倾控制好,指向及回馈做的不错。但急弯车身形态修复缓慢,方向盘有少于旷量,油门偏涩。算是操控性非常不错的了。标致307两厢,动力足,后段加速好,方向指向精确

三、提取英文

谢谢邀请,我不知道,希望他们可以走在一起,有一些网友说他们在演戏不可能真的在一起,有时候我看到这种话心里也会想他们到底会不会在一起,有时候自己坚持的相信他们会在一起,但是一看到别人的评论就开始不知道该说他们会在一起还是不会在一起,我是真的希望他们在一起,因为看的出昕昕在节目里付出的自己的真心,我只是不想让昕昕伤心??,不管他们会不会在一起,我都会祝福他们的

--提取英文 IF OBJECT_ID('DBO.GET_STR') IS NOT NULL DROP FUNCTION DBO.GET_STR GO CREATE FUNCTION DBO.GET_STR(@S VARCHAR(100)) RETURNS VARCHAR(100) AS BEGIN WHILE PATINDEX('%[^a-z]%',@S) > 0 BEGIN set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'') END RETURN @S END GO --测试 PRINT DBO.GET_STR('呵呵ABC123ABC') GO

大概推荐几款“好用不坏”的APP。VEditor——GIF图功能点:1、视频反转(将视频画面左右反转)2、导出视频声音、音频反转(声音倒放)3、视频转GIF4、无声处理自由度:可以自由选择视频时长、视频可以是手机存储内存储的视频也可为实时拍摄的视频。VUE——视频编辑手机端视频编辑神器。功能点:1、视频剪辑、加滤镜声音2、视频快放慢放等(适合编辑延时视频)3、导出分享方便(可导出至本地视频且可去除水印、可分享至朋友圈、微博等主流平台)TIM——商务QQ功能点:1、以聊天为主,去除绝大部分腾讯广告和功能2、安装包较小,节约空间需要注意:TIM不支持大部分APP的QQ快速登陆。Welike——微博

四、提取中文

一些文章上说乔心是现实版的曲筱绡,我认为曲虽然嚣张跋扈但是至少她对朋友是真心的虽然她的方式我并不赞同,毕竟我现在还没有建立一个完善的世界观。但至少我明白对消防官兵应该尊重。我不相信乔心这么大个人会连这些事都不知道。退一步讲,她家那么富有,一定会有公关方面的人脉,他父母会让这些不利于女儿的事件报道出来吗。你们又不是不知道有多少不利于其个人利益的事件被压下来,例子就不用我列举了吧,还要一个一个查,我的流量不够用啊,你们一定会知道些的。拐回来说这极有可能就是一个剧本,骗我的流量,骗我的点击量,等这一阵的风波过了在给乔心洗白白。袁姗姗古力娜扎当初一个被骂滚出娱乐圈一个被送骨灰盒现在不都是挺白的嘛,白里

--提取中文 IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL DROP FUNCTION DBO.CHINA_STR GO CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100)) RETURNS VARCHAR(100) AS BEGIN WHILE PATINDEX('%[^吖-座]%',@S) > 0 SET @S = STUFF(@S,PATINDEX('%[^吖-座]%',@S),1,N'') RETURN @S END GO PRINT DBO.CHINA_STR('呵呵ABC123ABC') GO

五、过滤重复字段(多种方法)

--过滤重复字符 IF OBJECT_ID('DBO.DISTINCT_STR') IS NOT NULL DROP FUNCTION DBO.DISTINCT_STR GO CREATE FUNCTION DBO.DISTINCT_STR(@S NVARCHAR(100),@SPLIT VARCHAR(50)) RETURNS VARCHAR(100) AS BEGIN IF @S IS NULL RETURN(NULL) DECLARE @NEW VARCHAR(50),@INDEX INT,@TEMP VARCHAR(50) IF LEFT(@S,1)<>@SPLIT SET @S = @SPLIT+@S IF RIGHT(@S,1)<>@SPLIT SET @S = @S+@SPLIT WHILE CHARINDEX(@SPLIT,@S)>0 AND LEN(@S)<>1 BEGIN SET @INDEX = CHARINDEX(@SPLIT,@S) SET @TEMP = LEFT(@S,CHARINDEX(@SPLIT,@S,@INDEX+LEN(@SPLIT))) IF @NEW IS NULL SET @NEW = ISNULL(@NEW,'')+@TEMP ELSE SET @NEW = ISNULL(@NEW,'')+REPLACE(@TEMP,@SPLIT,'')+@SPLIT WHILE CHARINDEX(@TEMP,@S)>0 BEGIN SET @S=STUFF(@S,CHARINDEX(@TEMP,@S)+LEN(@SPLIT),CHARINDEX(@SPLIT,@S,CHARINDEX(@TEMP,@S)+LEN(@SPLIT))-CHARINDEX(@TEMP,@S),'') END END RETURN RIGHT(LEFT(@NEW,LEN(@NEW)-1),LEN(LEFT(@NEW,LEN(@NEW)-1))-1) END GO PRINT DBO.DISTINCT_STR('A,A,B,C,C,B,C,',',') --A,B,C GO -------------------------------------------------------------------- --过滤重复字符2 IF OBJECT_ID('DBO.DISTINCT_STR2') IS NOT NULL DROP FUNCTION DBO.DISTINCT_STR2 GO CREATE FUNCTION DBO.DISTINCT_STR2(@S varchar(8000)) RETURNS VARCHAR(100) AS BEGIN IF @S IS NULL RETURN(NULL) DECLARE @NEW VARCHAR(50),@INDEX INT,@TEMP VARCHAR(50) WHILE LEN(@S)>0 BEGIN SET @NEW=ISNULL(@NEW,'')+LEFT(@S,1) SET @S=REPLACE(@S,LEFT(@S,1),'') END RETURN @NEW END GO SELECT DBO.DISTINCT_STR2('AABCCD') --ABCD GO

六、根据特定字符串分割字段值

IF OBJECT_ID('DBO.SPLIT_STR') IS NOT NULL DROP FUNCTION DBO.SPLIT_STR GO CREATE FUNCTION DBO.SPLIT_STR( @S varchar(8000), --包含多个数据项的字符串 @INDEX int, --要获取的数据项的位置 @SPLIT varchar(10) --数据分隔符 ) RETURNS VARCHAR(100) AS BEGIN IF @S IS NULL RETURN(NULL) DECLARE @SPLITLEN int SELECT @SPLITLEN=LEN(@SPLIT+'A')-2 WHILE @INDEX>1 AND CHARINDEX(@SPLIT,@S+@SPLIT)>0 SELECT @INDEX=@INDEX-1,@S=STUFF(@S,1,CHARINDEX(@SPLIT,@S+@SPLIT)+@SPLITLEN,'') RETURN(ISNULL(LEFT(@S,CHARINDEX(@SPLIT,@S+@SPLIT)-1),'')) END GO PRINT DBO.SPLIT_STR('AA|BB|CC',2,'|') -- GO

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

SQL Server中,自定义函数有哪三种?

自定义函数分为:标量值函数或表值函数

  • 如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数。可以使用多条 Transact-SQL 语句定义标量值函数。 

  • 如果 RETURNS 子句指定 TABLE,则函数为表值函数。

  • 表值函数又可分为:内嵌表值函数(行内函数)或多语句函数

  • 如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为内嵌表值函数。 

  • 如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数。

sqlserver里关于自定义函数的问题

应该是调用时没有传入参数。

如自定义函数:

create function f_GetString

(@para nvarchar(40))

RETURNS nvarchar(100)

as

begin

declare @s nvarchar(100)

set @s=''

select @s=field1 from table

return @s

end

---------------调用

String sql="select a,b,c,dbo.f_GetString(d) as S from table ..."

如果用

String sql="select a,b,c,dbo.f_GetString() as S from table ..."

会提示函数未传入参数。

可在查询分析器中检验SQL语句是否正常追问已解决了 是varchar定义的时候没定义字节数所以报出这个问题了

SQL server 自定义函数

CREATE FUNCTION FUN_COMPUTE(@NUM INT) 

RETURNS FLOAT --FLOAT 

BEGIN 

DECLARE @NUM_CURRENT INT  --计数器

SET @NUM_CURRENT=1

DECLARE @RESULT FLOAT

SET @RESULT=0

    DECLARE @SIGN VARCHAR(1)

    SET @SIGN='+'

WHILE @NUM_CURRENT<=@NUM

BEGIN

IF @SIGN='+'

BEGIN

SET @RESULT=@RESULT+@NUM_CURRENT

SET @SIGN='-'

END

ELSE

BEGIN

SET @RESULT=@RESULT-@NUM_CURRENT

SET @SIGN='+'

END

SET @NUM_CURRENT=@NUM_CURRENT+2

END 

RETURN @RESULT

END

--SELECT DBO.FUN_COMPUTE(7)

SQLServer里用户自定义函数写在哪

drop FUNCTION [dbo].[jzf_Get_IDNO]

go

-- =============================================

-- Author:<Author,,Name>

-- Create date: <Create Date, ,>

-- Description:<Description, ,>

-- =============================================

create FUNCTION [dbo].[jzf_Get_IDNO]

(

-- Add the parameters for the function here

@ApartID nvarchar(40)

)

RETURNS nvarchar(40)

AS

BEGIN

-- Declare the return variable here

DECLARE @str nvarchar(40)

set @str=N'未查到'

-- Add the T-SQL statements to compute the return value here

SELECT @str=Isnull(IDNO,N'未定义') from mytable where objectid=@ApartID

-- Return the result of the function

RETURN @str

END

---------------------结果显示在,上述函数是标量值函数:

sql server 中的自定义函数应该如何调用?

自定义函数

用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回

用户自定义函数的类型:

标量函数:返回一个标量值

表格值函数{内联表格值函数、多表格值函数}:返回行集(即返回多个值)

1、标量函数

Create function 函数名(参数)

Returns 返回值数据类型

[with {Encryption | Schemabinding }]

[as]

begin

SQL语句(必须有return 变量或值)

End

Schemabinding :将函数绑定到它引用的对象上(注:函数一旦绑定,则不能删除、修改,除非删除绑定)

Create function AvgResult(@scode varchar(10))

Returns real

As

Begin

Declare @avg real

Declare @code varchar(11)

Set @code=@scode + ‘%’

Select @avg=avg(result) from LearnResult_baijiali

Where scode like @code

Return @avg

End

执行用户自定义函数

select 用户名。函数名 as 字段别名

select dbo.AvgResult(‘s0002’) as result

用户自定义函数返回值可放到局部变量中,用set ,select,exec赋值

declare @avg1 real ,@avg2 real ,@avg3 real

select @avg1= dbo.AvgResult(‘s0002’)

set @avg2= dbo.AvgResult(‘s0002’)

exec @avg3= dbo.AvgResult ‘s0002’

select @avg1 as avg1 ,@avg2 as avg2 ,@avg3 as avg3

函数引用

create function code(@scode varchar(10))

returns varchar(10)

as

begin

declare @ccode varchar(10)

set @scode = @scode + ‘%’

select @ccode=ccode from cmessage

where ccode like @scode

return @ccode

end

select name from class where ccode = dbo.code(‘c001’)

2、表格值函数

a、 内联表格值函数

格式:

create function 函数名(参数)

returns table

[with {Encryption | Schemabinding }]

as

return(一条SQL语句)

create function tabcmess(@code varchar(10))

returns table

as

return(select ccode,scode from cmessage where ccode like @ccode)

b、 多句表格值函数

create function 函数名(参数)

returns 表格变量名table (表格变量定义)

[with {Encryption | Schemabinding }]

as

begin

SQL语句

end

多句表格值函数包含多条SQL语句,至少有一条在表格变量中填上数据值

表格变量格式

returns @变量名 table (column 定义| 约束定义 [,…])

对表格变量中的行可执行select,insert,update,delete , 但select into 和 insert 语句的结果集是从存储过程插入。

Create function tabcmessalot (@code varchar(10))

Returns @ctable table(code varchar(10) null,cname varchar(100) null)

As

Begin

Insert @ctable

Select ccode,explain from cmessage

Where scode like @code

return

End

Select * from tabcmessalot(‘s0003’)

来自:http://hi.baidu.com/datachina/blog/item/801def0366c4e7ea09fa9344.html

下面是我从别的地方弄的一个例子,浅显易懂:

编写一个函数,该函数,可以通过输入借书时间来判断是否到期,当借阅时间大于30天,返回已经过期;否则返回还未到期。

CREATE FUNCTION IsDateout(@BDate datetime)

returns nvarchar(20)

AS

BEGIN

DECLARE @myresult nvarchar(20)

IF (datediff(day,@BDate,getdate())>30)

BEGIN

SET @myresult='已过期'

end

else

begin

set @myresult='未到期'

end

RETURN (@myresult)

END

SELECT dbo.IsDateout(cast('2009-12-17' AS datetime))--结果已过期

SELECT dbo.IsDateout(cast('2010-12-17' AS datetime))--结果未到期

  • 本文相关:
  • sqlserver中的自定义函数的方法小结
  • mysql建立自定义函数的问题
  • sql server使用自定义函数以及游标
  • 深入mysql创建自定义函数与存储过程的详解
  • mysql中文汉字转拼音的自定义函数和使用实例(首字的首字母)
  • mysql 自定义函数create function示例
  • 谈谈sqlserver自定义函数与存储过程的区别
  • 浅谈mysql 自定义函数
  • mysql中实现提取字符串中的数字的自定义函数分享
  • 在asp.net 2.0中操作数据之七十四:用managed code创建存储过程和用户自定义函数(下部分)
  • sql 查询结果合并union all用法_数据库技巧
  • sql server sql高级查询语句小结
  • 分享sql server删除重复行的6个方法
  • vs10安装之后一些列问题
  • 简单介绍sql server里的闩锁
  • 数据库表的查询操作实践演练(实验三)
  • sqlserver查询和kill进程死锁的语句
  • 数据库性能优化二:数据库表优化提升性能
  • 将session值储存于sql server中
  • sqlserver数据库移动数据库路径的脚本示例
  • SQL Server中,自定义函数有哪三种?
  • sqlserver里关于自定义函数的问题
  • SQL server 自定义函数
  • SQLServer里用户自定义函数写在哪
  • sql server 中的自定义函数应该如何调用?
  • sqlserver 2000 自定义函数
  • sql server 中如何查看自定义函数的源代码?
  • 请问sql server如何才能使用自定义函数
  • sqlserver 怎么调用自定义函数
  • [转载]SQL Server用户自定义函数中如何使用Getdate()
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved