希望我能在存储过程中根据条件插入日期时间得到一些帮助。
我有以下测试查询,当条件为真时,它会在午夜插入额外的一拳。
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 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。