根据条件插入日期时间值

时间:2013-02-16 09:19:33

标签: sql sql-server time-and-attendance

希望我能在存储过程中根据条件插入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; =或子查询用作表达式时,不允许这样做。

0 个答案:

没有答案