sql server中常用的6個(gè)自定義函數(shù)分享
來(lái)源:易賢網(wǎng) 閱讀:934 次 日期:2015-01-20 10:07:34
溫馨提示:易賢網(wǎng)小編為您整理了“sql server中常用的6個(gè)自定義函數(shù)分享”,方便廣大網(wǎng)友查閱!

在日常應(yīng)用中,往往根據(jù)實(shí)際需求錄入一些值,而這些值不能直接使用,所以sql中經(jīng)常會(huì)對(duì)字段值進(jìn)行一些常規(guī)的處理。這里搜集了(提取數(shù)字、英文、中文、過(guò)濾重復(fù)字符、分割字符的方法),方便日后查詢使用。

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

代碼如下:

--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')

--空

二、提取數(shù)字

代碼如下:

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

--測(cè)試

print dbo.get_number('呵呵abc123abc')

go

--123

三、提取英文

代碼如下:

--提取英文

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

--測(cè)試

print dbo.get_str('呵呵abc123abc')

go

四、提取中文

代碼如下:

--提取中文

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

五、過(guò)濾重復(fù)字段(多種方法)

代碼如下:

--過(guò)濾重復(fù)字符

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

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

--過(guò)濾重復(fù)字符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

六、根據(jù)特定字符串分割字段值

代碼如下:

if object_id('dbo.split_str') is not null

drop function dbo.split_str

go

create function dbo.split_str(

@s varchar(8000), --包含多個(gè)數(shù)據(jù)項(xiàng)的字符串

@index int, --要獲取的數(shù)據(jù)項(xiàng)的位置

@split varchar(10) --數(shù)據(jù)分隔符

)

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

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看數(shù)據(jù)庫(kù)
易賢網(wǎng)手機(jī)網(wǎng)站地址:sql server中常用的6個(gè)自定義函數(shù)分享
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)