12月 26, 2007

SQL server 2005自訂函數

因為要計算時間區間內沒有周休二日、午休時間的真正上班時間

之前寫在asp、php裡感覺比較慢也覺得code不好維護。

為什麼SQL沒有只抓上班時間的函數= =

研究了一下自訂函數的方法,因為第一次接觸有錯請告訴我,謝謝

撰寫的位置:

登入SQL Server Management Studio後>新增查詢

CODE:

--登入你的DB
USE Tbcwmonet;
GO
--如果dbo.GetWorkMinute這個函已存在就刪掉
IF OBJECT_ID (N'dbo.GetWorkMinute', N'FN') IS NOT NULL
    DROP FUNCTION dbo.GetWorkMinute;
GO
CREATE     FUNCTION GetWorkMinute
(
     @要帶入的值1 資料型態 ,
     @要傳入的值2 資料型態,
     @..............................
)
RETURNS int
AS

begin

return @要傳回的值
end

說明
Begin....END:類似C、Java、PHP的大括號{、}用來把程式的區塊標出來

EX:
(計算日期區間中的六、日有幾天)
while  @i<=DateDiff(day,@startDate,@endDate)
   begin 
    set @x=DateAdd(day,@i,@startDate) 
    if DatePart(weekday,@x)=1 or DatePart(weekday,@x)=7     
     set @weekdays=@weekdays+1  
     set @i=@i+1    
   end

變數要用declare宣告,並用@開頭,值給變數時要用set

EX:
declare @DayMinute int,@s_Minute DATETIME
set @DayMinute = 8*60   
set @s_Date ="2008/01/01"

寫完後按執行
SQL server 2005自訂函數會放在DB中>可程式性>函數>純量值函數的資料夾中。

沒有留言: