希望我能在存储过程中根据条件插入datetime时获得一些帮助。
我有以下测试查询,在条件为真时在午夜插入额外的打卡。
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
我的问题是。我应该如何运行查询以正确的格式获取日期和时间?并且有什么方法可以使用条件中的日期。即,当datetime&gt; 00:00和&lt; 02:00从表中,然后从表中插入datetime 00:00和datetime -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。当子查询遵循=,!=,&lt;,&lt; =,&gt;,&gt; =或子查询用作表达式时,不允许这样做。