sql的標量值函式例子

2021-06-26 14:50:58 字數 3673 閱讀 4325

1.分割字串,處理某個字元第幾次出現獲取後面的值

use [ef]

go/****** object: userdefinedfunction [dbo].[f_substr] script date: 10/27/2014 20:36:10 ******/

set ansi_nulls on

goset quoted_identifier on

goalter function [dbo].[f_substr](

@s varchar(8000), --待分拆的字串

@split varchar(10), --資料分隔符

@fx varchar(10), --方向 left

@place int ---第幾個

)returns varchar(8000)

asbegin

declare @str varchar(8000)

declare @i int ---迴圈次數

declare @pp int ---位置

set @pp=0

set @i=@place

set @str=@s

while(@i>0)

begin

declare @p int

set @p=charindex(@split,@str)

if(@p>0)

begin

set @str = substring(@str,@p+1,len(@str)-@p+1)

endelse

begin

return ''

endset @pp = @pp+@p

set @i = @i-1

endif(@fx='left')

begin

set @str=left(@s,@pp-1)

endreturn @str

end

2. 獲取某天是當月第幾周

use [ef]

go/****** object: userdefinedfunction [dbo].[weekofmonth] script date: 10/27/2014 20:51:17 ******/

set ansi_nulls on

goset quoted_identifier on

goalter function [dbo].[weekofmonth](@day datetime)

returns int

asbegin

declare @num int

declare @start datetime

declare @dd int

declare @dayofweek char(8)

declare @dayofweek_num char(8)

declare @startweekdays int

if datepart(dd,@day)=1

return 1

else

set @start= (select dateadd(mm, datediff(mm,0,@day), 0)) --乙個月第一天的

set @dayofweek= (datename(weekday,@start)) ---得到本月第一天是週幾

set @dayofweek_num=(select (case @dayofweek when '星期一' then 7

when '星期二' then 6

when '星期三' then 5

when '星期四' then 4

when '星期五' then 3

when '星期六' then 2

when '星期日' then 1

end)) ---得到本月的第一周一共有幾天

set @dd=datepart(dd,@day) ----得到今天是這個月的第幾天

if @dd <= @dayofweek_num --小於前一周的天數

return 1

else

set @dd=@dd-@dayofweek_num

if @dd % 7=0

begin

set @num=@dd / 7

return @num+1

endelse --if @dd % 7<>0

set @num=@dd / 7

set @num=@num+1+1

return @num

end

3. 獲取客戶端ip

/****** object:  userdefinedfunction [dbo].[getcurrentip]    script date: 10/27/2014 20:53:49 ******/

set ansi_nulls on

goset quoted_identifier on

goalter function [dbo].[getcurrentip] ()

returns varchar(255)

asbegin

declare @ip_address varchar(255);

select @ip_address = client_net_address

from sys.dm_exec_connections

where session_id = @@spid;

return @ip_address;

end

4.輸入乙個日期獲取下個月是幾月

use [ef]

go/****** object: userdefinedfunction [dbo].[f_getnextperiod] script date: 10/27/2014 20:55:55 ******/

set ansi_nulls on

goset quoted_identifier on

goalter function [dbo].[f_getnextperiod]

(@qj varchar(30)

)returns varchar(20)

asbegin

declare @day varchar(12)

declare @year varchar(4)

declare @month varchar(2)

set @day = dbo.get_strarraystrofindex(@qj,'.',1)+'-'+dbo.get_strarraystrofindex(@qj,'.',2)+'-01'

set @month =convert(varchar(2),month(dateadd(month,+1,@day)))

set @year = convert(varchar(4),year(dateadd(month,+1,@day)))

-- return the result of the function

return @year+'.'+@month

end

select dbo.f_getnextperiod('2014.10.27')

/*結果

2014.11

*/

SQL 標量值函式的呼叫

呼叫 ms sql 標量值函式,應該在函式前面加上 dbo.否則會報 不是可以識別的 內建函式名稱 錯誤。例如 declare whichdb tinyint select whichdb dbo.user getwhichdb 1 看看是哪個資料庫的 另外,標量值函式就相當於乙個變數,而不是乙個表...

標量值函式的用法

昨天做乙個前台顯示,就是資料庫有4個字段都是int型,需要前台把它們合成乙個字段輸出。本來想著在資料庫在加一列,後來有人提議用標量值函式,發現這樣挺好的。拿來分享一下。首先新建查詢複製下面 code set ansi nulls on go set quoted identifier on go c...

SQL錶值函式和標量值函式的區別

原文 sql錶值函式和標量值函式的區別 寫sql儲存過程經常需要呼叫一些函式來使處理過程更加合理,也可以使函式復用性更強,不過在寫sql函式的時候可能會發現,有些函式是在錶值函式下寫的有些是在標量值下寫的,區別是錶值函式只能返回乙個表,標量值函式可以返回基型別。舉個例子,當使用者刪除乙個節點的時候,...