0
對於時間計算表,我編寫了兩個標量函數來檢索返回值。使用標量函數的返回值計算新結果
USE [SECI]
GO
/****** Object: UserDefinedFunction [dbo].[sfCIKorr] Script Date: 31.03.2014 14:14:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
ALTER FUNCTION [dbo].[sfCIKorr]
(
-- Add the parameters for the function here
@dteCheckInTime datetime,
@dtePlanTimeCheckIn datetime
)
RETURNS datetime
as
BEGIN
Declare @dteCIKorr datetime
--CheckInTime correction
If @dteCheckInTime > 0 And @dtePlanTimeCheckIn > 0
Begin
set @dteCIKorr = @dtePlanTimeCheckIn
end
else If @dteCheckInTime < @dtePlanTimeCheckIn
begin
set @dteCIKorr = @dtePlanTimeCheckIn
end
Else If (@dteCheckInTime > @dtePlanTimeCheckIn) And (@dteCheckInTime < DateAdd(minute, 15, @dtePlanTimeCheckIn))
begin
set @dteCIKorr = @dtePlanTimeCheckIn
end
Else If @dteCheckInTime > DateAdd(minute, 15, @dtePlanTimeCheckIn)
begin
set @dteCIKorr = dbo.sfRoundToHourParts(@dteCheckInTime, 4)
End
Else If @dteCheckInTime > 0 And @dtePlanTimeCheckIn = 0
begin
set @dteCIKorr = dbo.sfRoundToHourParts(@dteCheckInTime, 4)
end
Else If @dteCheckInTime = 0
begin
set @dteCIKorr = 0
End
return @dteCIKorr
end
二之一: dbo.sfRoundToHourParts(聚結(CheckOutTime, ''),4),其向上或向下取四分之一小時。
兩個工作正常,但現在我想用在更新查詢的結果來檢索另一個結果應該是這樣的:
從VBA碼:
If dteCheckInTime > 0 And dteCheckOutTime > 0 Then
dteCalculatedTime = Format(DateDiff("n", dteCIKorr, dteCOKorr)/1440, "hh:nn")
Else
dteCalculatedTime = 0
End If
因此,作爲最終的結果,我想這樣做:
Update mytable
set CheckInTimeCorr= dbo.sfCIKorr(@dteCheckInTime, @dtePlanTimeCheckIn),
CheckOutTimeCorr=dbo.sfRoundToHourParts(coalesce(CheckOutTime,''), 4),
CalculatedTime= see my VBA-Code!
Select from mytable
所以我需要兩個functiuons檢索,我需要做的進一步步驟中的計算結果。順便說一下,我不知道,如果使用兩個標量函數是迫切需要完成我的查詢或我可以更好地在內聯表函數中執行此操作。
感謝您的幫助。 邁克爾