看到別人寫的函式,一開始看不懂,於是在網上找資料,原來是錶值函式,感覺又學到了,滿滿的充實感,摘錄如下:
錶值函式
錶值函式和標量值函式的不同是 錶值函式是返回乙個table型別 table型別相當與一張儲存在記憶體中的一張虛擬表.
錶值函式的語法:
create function [ schema_name. ] function_name
( [
[ ,...n ]])
returns table
[ with [ ,...n ] ]
[ as ]
return [ ( ] select_stmt [ ) ]
[ ; ]
現在來寫乙個比較實用的錶值函式..
寫乙個切割字串的錶值函式
1 --------------------------這個函式用來切割字串的-----------------
2 --函式的引數 第乙個是要切割的字串 第二個是要以什麼字串切割
3 create function split(@text nvarchar(4000),@sign nvarchar(4000))
4 returns @temptable table(id int identity(1,1) primary key,[value] nvarchar(4000))
5 as
6 begin
7 declare @startindex int --開始查詢的位置
8 declare @findindex int --找到的位置
9 declare @content varchar(4000) --找到的值
10 --初始化一些變數
11 set @startindex = 1 --t-sql中字串的查詢位置是從1開始的
12 set @findindex=0
13
14 --開始迴圈查詢字串逗號
15 while(@startindex <= len(@text))
16 begin
17 --查詢字串函式 charindex 第乙個引數是要找的字串
18 -- 第二個引數是在**查詢這個字串
19 -- 第三個引數是開始查詢的位置
20 --返回值是找到字串的位置
21 select @findindex = charindex(@sign,@text,@startindex)
22 --判斷有沒找到 沒找到返回0
23 if(@findindex =0 or @findindex is null)
24 begin
25 --如果沒有找到者表示找完了
26 set @findindex = len(@text)+1
27 end
28 --擷取字串函式 substring 第乙個引數是要擷取的字串
29 -- 第二個引數是開始的位置
30 -- 第三個引數是擷取的長度
31 --@findindex-@startindex 表示找的的位置-開始找的位置=要擷取的長度
32 --ltrim 和 rtrim 是去除字串左邊和右邊的空格函式
33 set @content = ltrim(rtrim(substring(@text,@startindex,@findindex-@startindex)))
34 --初始化下次查詢的位置
35 set @startindex = @findindex+1
36 --把找的的值插入到要返回的table型別中
37 insert into @temptable ([value]) values (@content)
38 end
39 return
40 end
這個函式的作用就是類似.net中的string類的split方法
現在來測試這個函式
這個函式返回的是table型別 所以可以用下面的語法來呼叫
select * from dbo.split('a,b,c,d,e,f,g',',')
得到的結果
這個函式還是比較實用的..
原**:
SQLserver 資料庫自定義函式
最近專案開發上使用的sqlserver資料庫是2008版本,由於08版本的資料是沒有字串合併 string agg 這個函式 2017版本及以上支援 的,只有用stuff for xml path 來達到效果。所以才有萌生出了自定義聚合函式的想法。第一步新建專案 2008版本選擇 檔案 新建 專案 ...
在資料庫中自定義外部函式
在oracle中可以使用pl sql來實現一些複雜的功能,同時可以通過自定義的外部函式來實現很多豐富的功能,我們可以基於c c 來寫一些函式,然後把動態鏈結庫放入oracle home中方便直接呼叫。首先這種實現方法需要依賴於資料庫層面的服務extproc,會生成乙個extproc程序,然後專門來處...
自定義mysql資料庫函式 資料庫自定義函式
這個為通用過濾關鍵字的函式,若有其他關鍵字未新增可以參考語法加入。use db go object userdefinedfunction dbo f filterstring script date 12 09 2013 17 03 45 set ansi nulls on go set quot...