对于时间计算表,我编写了两个标量函数来检索返回值。
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,&#39;&#39;),4)向上或向下舍入到四分之一小时。
两者都可以正常工作,但现在我想在Update-query中使用结果来检索另一个应该是这样的结果:
来自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
所以我需要两个函数来检索结果,我需要对进一步的步骤进行计算。 顺便说一句,我不知道,如果使用两个标量函数真的需要完成我的查询,或者我可以更好地在内联表函数中执行此操作。
谢谢你的帮助。 迈克尔
答案 0 :(得分:0)
如果CalculatedTime列始终依赖于CheckInTimeCorr和CheckOutTimeCorr中的值,我将其创建为计算列(http://technet.microsoft.com/en-us/library/ms188300.aspx):
ALTER TABLE tbl ADD CalculatedTime AS (--your code here--)
我想帮助您了解该列的实际定义,但无法读取VBA :(