SQL函式的使用

2021-05-25 10:21:40 字數 4183 閱讀 6396

sql server 2005 自定義函式語彙小結

由於工作的需要,了解下sql server 2005 函式的寫法,現在總結一下:

對於sql server 2005 資料庫而言,函式與儲存過程在語法方面是有很大的相同點,

最大的不同就是函式有返回值,直接使用returns ,而儲存過程則使用output來宣告輸出變數

一、下面先說明下,如何建立函式

1、建立沒有返回值與沒有引數的函式

create function my_function()

asbegin

declare @variable varchar(255) --宣告字元型變數

declare @variable int --宣告整形型變數

...(do something)

set @variable = '12345' --對變數variable賦值

end2、建立沒有返回值有引數的函式

create function my_function(@user_name varchar(128),@password int(6))

asbegin

declare @variable_1 varchar(255) --宣告字元型變數

...(do something)

set @variable_1 = @user_name + convert(varchar(255),@password) --將變數@user_name與@password連線賦給@variable_1,其中convert()函式是將int型轉為varchar型

end3、建立有返回值與有引數的函式

create function my_function(@user_name varchar(128),@password int(6))

returns  varchar(255)--設定返回值,記住是returns 而不是return

asbegin

declare @result varchar(5)

declare @fagle varchar(5)

set @result = select users.user_name from users as users where users.user_name = @user_name and users.password = @password

if @result = ''

begin

set @fagle = 'no'

endelse

begin

set @falge = 'yes'

endreturn @result --返回結果

end二、刪除乙個函式語法

drop function my_function

三、執行乙個函式語法

select dbo.my_function(...) --根據有沒引數來處理

go--注:在sql server 2005 中,有內部函式與外部函式,資料庫系統自帶函式,如sum(),count()等等,這些稱為內部函式,而我們自定義的函式稱為外部函式。

--在執行函式語法中,也有些區別,如執行內部函式:select sum(total) from ...,那麼執行外部函式則需要在函式名前加dbo. + 自定義函式名,如

--select dbo.my_function()

--go

四、下面提供二個例子

1、日期判斷,判斷傳進來的日期是否在上個月日到本月日之間

--請注意convert()函式的用法

create function isnewcontract(@date varchar(32))

returns varchar(32)

asbegin

declare @begin_time varchar(32)

declare @end_time varchar(32)

declare @temp varchar(4)

declare @result varchar(32)

declare @month varchar(2)

set @begin_time=convert(varchar,datepart(year, getdate())) + '-'

set @end_time=convert(varchar,datepart(year, getdate())) + convert(varchar, datepart(month, getdate())) + convert(varchar, '14')

set @temp=convert(varchar(2),(month(getdate())-1 ))

if(@temp < 10 )

begin

set @begin_time = @begin_time + convert(varchar(1),'0') + @temp + '-' + convert(varchar, '15')

endif(@date >= @begin_time and @date <= @end_time)

begin

set @result = '是'

endelse

begin

set @result = @begin_time

endreturn @result

end2、查詢多條記錄合併成一條記錄返回,並寫入execl表中,進行分行換行顯示,其中使用游標進行迴圈處理

--在資料庫中,execl預設換行符acsii碼為'10',在合併字串之前,需要先轉為execl識別的換行符,具體使用chat()內部函式處理

create function getexportreportcollect(@projectid int ,@month varchar(64))

returns varchar(4096) --設定返回值

asbegin

declare @num varchar(2)

declare @end varchar(10)

declare @result varchar(4096) --用於返回查詢結果

declare city_cursor cursor for --宣告游標變數

select reported.id

from dbo.investment_budget_reported as reported

left join dbo.investment_budget_contract as con

on reported.contractid = con.id

where reported.[month] = @month and reported.projectid = @projectid

set @result=''

set @num = '1'

set @end = '10' --匯入execl表中,換行符的acsii碼

declare @field int --宣告臨時存放cityid的變數

open city_cursor --開啟游標

fetch next from city_cursor into @field --將實際id賦給變數

while(@@fetch_status = 0) --迴圈開始

begin

if((select [content] from dbo.investment_budget_reported where id = @field )is not null)

begin

if(@result = '')

select @result = @result + @num + '、' + [content] from dbo.investment_budget_reported where id = @field

else

select @result = @result + @num + '、' + [content] from dbo.investment_budget_reported where id = @field

set @result = @result + char(@end) --讓換行符轉為execl認識的換行符

set @num = @num + 1

endfetch next from city_cursor into @field --下乙個reportid

endclose city_cursor --關閉游標

deallocate city_cursor --釋放游標引用

return @result

end

SQL 函式使用

isnull函式 isnull check expression,replacement value 給定兩個引數check expression和replacement value,如果check expression是null,那麼返回replacement value,否則返回check ex...

SQL中IF函式的使用

sql中if函式的使用 if a,b,c if判斷,如果a滿足條件,返回b,否則返回c 舉個例子 查詢sc表中及格的學生 建立表sc sc sid,cid,score sid 學生編號,cid 課程編號,score 分數 create table sc sid varchar 10 cid varc...

Sql 中 cast 函式的使用

1 語法 cast expression as data type 引數說明 expression 任何有效的sql server 表示式 as 用於分割兩個引數,再as之前的是要處理的資料,再as之後是要轉換的資料型別 data type 目標系統所提供的資料型別,不能使用使用者自定義的資料型別 ...