早晨上班,考勤系统突然遭遇崩溃,结果造成公司好多员工未能正常考勤,后经服务器重启才解决问题,但此时员工再考勤已经“迟到”了。这是考勤系统正常运行以来第一次事故,没办法只好采取补救措施,手工将员工的考勤记录做一下调整。
这种事情,如果是用C#就很容易解决,但是在SQL中该如何做呢?以前还真没有弄过,打开SQL Server联机丛书,很快找到一个函数:DATEADD ( datepart , number, date ) ,该函数的作用是在指定时间的基础上加上一段时间,然后再返回。有了这个函数,事情可就好办多了。
比如:
USE pubs
GO
SELECT DATEADD(day,21,pubdate) AS timeframe
FROM titles
GO
就是返回在pubdate字段原有时间的基础上加上21天的值。
datepart取值如下表:
具体到我的问题,需要在原有记录的基础上减去15分钟,条件是所有今天早上迟到的考勤记录,见下面的SQL:
update kaoqin
set sj=dateadd(mi,-15,sj)
where (sj>'2007-8-15 08:00:00')
减去时间只需要设定number为相应的负值就行了。
这种事情,如果是用C#就很容易解决,但是在SQL中该如何做呢?以前还真没有弄过,打开SQL Server联机丛书,很快找到一个函数:DATEADD ( datepart , number, date ) ,该函数的作用是在指定时间的基础上加上一段时间,然后再返回。有了这个函数,事情可就好办多了。
比如:
USE pubs
GO
SELECT DATEADD(day,21,pubdate) AS timeframe
FROM titles
GO
datepart取值如下表:
| 日期部分 | 缩写 |
|---|---|
| Year | yy, yyyy |
| quarter | qq, q |
| Month | mm, m |
| dayofyear | dy, y |
| Day | dd, d |
| Week | wk, ww |
| Hour | hh |
| minute | mi, n |
| second | ss, s |
| millisecond | ms |
具体到我的问题,需要在原有记录的基础上减去15分钟,条件是所有今天早上迟到的考勤记录,见下面的SQL:
update kaoqin
set sj=dateadd(mi,-15,sj)
where (sj>'2007-8-15 08:00:00')
本文介绍了在SQL Server中如何使用DATEADD函数来对时间进行加减操作,以解决因系统故障导致的考勤记录问题。通过示例展示了如何在原有日期上增加或减少天数、分钟,以及如何针对特定条件更新记录。
626

被折叠的 条评论
为什么被折叠?



