0

希望我能在存储过程中根据条件插入日期时间得到一些帮助。

我有以下测试查询,当条件为真时,它会在午夜插入额外的一拳。

Declare
@Clock datetime = dateadd(dd ,0, datediff(dd,0,'02-07-2013'))
,@Status varchar(50) = 'CLockin'
,@UID varchar(10) ='001'
,@UserName varchar(50)='ABC'


IF EXISTS (SELECT UID, Clock From TestRecord
Where CONVERT(VARCHAR(8),Clock,108) >'00:00:00' and
CONVERT(VARCHAR(8),Clock,108) <'02:00:00')

INSERT INTO TestRecord 
(CLock,Status,UID,UserName)
Values (@Clock,@Status,@UID,@UserName)

因此,通过下表,

Date          UID        UserName          Status          Clock
====          ===        ========          ======          =====
02/06/2012    001        ABC               Clockin         17:00
02/07/2013    001        ABC               ClockIn         00:59

上面的查询将在午夜创建一个额外的打孔。

Date          UID        UserName          Status          Clock
====          ===        ========          ======          =====
02/06/2012    001        ABC               Clockin         17:00
02/07/2013    001        ABC               ClockIn         00:00
02/07/2013    001        ABC               ClockIn         00:59

然后上表将移至如下所示。

Date        UID       Name         In        Out       Total
====        ===       ====         ==        ===       =====
02/06       001       ABC          17:00     17:00      0
02/07       001       ABC          00:00     00:59      0.98

几天来,我一直在尝试弄清楚如何在前一天插入另一拳。即,虽然 02/07 将获得午夜打孔,但 02/06 还需要 02/06 23:59 打孔,我已经使用上述相同查询对其进行了测试,但我得到的最接近的是

declare @Clock datetime =CONVERT(VARCHAR(12),'23:59')

这给了我。1900/01/01 23:59

我的问题是。我应该如何运行查询以获取正确格式的日期和时间?有什么办法可以使用条件中的日期。即,当表格中的日期时间>00:00 和<02:00 时,从表格中插入日期时间00:00 和日期时间-1 23:59。

谢谢..

进一步挖掘,并从这里的好人那里得到提示。我现在可以像这样在 2 部分中声明日期时间..

Declare @date datetime = dateadd(dd ,-1, datediff(dd,0,'02-07-2013'))
,@time datetime = CONVERT(VARCHAR(12),'23:59')
,@mydt datetime
SET @mydt=Cast(@date+ ' ' + @time as datetime) 

然后运行带有值的插入(@mydt ...)

其他绝望的尝试是执行以下操作..

Declare @date datetime 
SET @date = (Select Clock from CONVERT(VARCHAR(8),Clock,108) >'00:00:00' 
and CONVERT(VARCHAR(8),Clock,108) <'02:00:00')  

但这会引发错误。子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

4

0 回答 0