求一数据库语句,请高手们帮帮忙

时间:2021-02-22 20:44:49
我的数据库结构语句是这样的
create table kaoqing(
kaoqingid int identity(1,1),
username varchar(9) not null,
userip varchar(16) not null,
ktime datetime default(getdate())
)
create table banci(
banciid int,
name varchar(12) not null,
stime time(7) not null,---上班时间08:00.下班时间17:00
xtime time(7) not null,---一天2次卡,中午休息不打卡.
)
create table kao(
kaoid int identity(1,1),
username varchar(12),
userip varchar(16),
ktime datetime,
kaostate varchar(15)---考勤状态,分为迟到,正常,早退.
)

考勤表记录用户名,ip,考勤时间, 班次这个表记录不同的人的不同上下班时间,两个表中的username跟name是关联的.我的意图是,怎么在kaoqing这个表一插入数据时,数据库自动在考勤时间跟班次表中的时间想匹配判断考勤状态是正常还是早退 然后在kao这个表记录一条记录.对这个没什么思路.实在搞不出.请大大们帮帮手.没什么分了,不好意思.

6 个解决方案

#1


在kaoqing表中建立insert触发器,用触发器控制‘kaoqing这个表一插入数据时,数据库自动在考勤时间跟班次表中的时间想匹配判断考勤状态是正常还是早退 然后在kao这个表记录一条记录’

#2


引用 1 楼 koumingjie 的回复:
在kaoqing表中建立insert触发器,用触发器控制‘kaoqing这个表一插入数据时,数据库自动在考勤时间跟班次表中的时间想匹配判断考勤状态是正常还是早退 然后在kao这个表记录一条记录’

肯定要用触发器,现在我需要的是怎么根据考勤时间和班次中规定的上班时间来判断考勤的状态.

#3


考情表和班次表没有关联么?

#4


有的话其实就是简单的case when 判断吧

#5


判断  第一次打卡时间小于上班时间则是迟到 第二次上班时间小于下班时间 就是早退  否则就是正常

#6


判断语句写好了,我把表结构也改了
create table kaoqing(
kaoqingid int identity(1,1),
username varchar(9) not null,--网页自动获取并插入数据
userip varchar(16) not null,--网页自动获取并插入数据
ktime datetime default(getdate()),
kaostate varchar(15)---考勤状态,分为迟到,正常,早退.由数据库判断
)
create table banci(
banciid int,
name varchar(12) not null,
stime time(7) not null,---上班时间08:00.下班时间17:00
xtime time(7) not null,---一天2次卡,中午休息不打卡.
)


判断语句为:
SELECT
       CASE 
       WHEN CONVERT(varchar(100), ktime, 24)<=CONVERT(varchar(10),stime,120)and CONVERT(varchar(100), ktime, 24) between '07:00:00' And CONVERT(varchar(10),stime,120) THEN '正常上班'
       WHEN CONVERT(varchar(100), ktime, 24)<CONVERT(varchar(10),xtime,120)and CONVERT(varchar(100), ktime, 24) between CONVERT(varchar(10),stime,120) And CONVERT(varchar(10),xtime,120) THEN '迟到'
       WHEN CONVERT(varchar(100), ktime, 24)>CONVERT(varchar(10),xtime,120) THEN '正常下班'
       ELSE null END kaoqing,kaoqingid,stime,ktime,xtime,username FROM kaoqing,banci where kaoqing.username=banci.name

我的考勤表除了考勤状态外其它的都是网页自动获取数据并插入数据库的.我的想法是写一个触发器在kaoqing这个表插入数据时,根据判断语句,更新考勤状态.请高手们帮个忙,支支招.

#1


在kaoqing表中建立insert触发器,用触发器控制‘kaoqing这个表一插入数据时,数据库自动在考勤时间跟班次表中的时间想匹配判断考勤状态是正常还是早退 然后在kao这个表记录一条记录’

#2


引用 1 楼 koumingjie 的回复:
在kaoqing表中建立insert触发器,用触发器控制‘kaoqing这个表一插入数据时,数据库自动在考勤时间跟班次表中的时间想匹配判断考勤状态是正常还是早退 然后在kao这个表记录一条记录’

肯定要用触发器,现在我需要的是怎么根据考勤时间和班次中规定的上班时间来判断考勤的状态.

#3


考情表和班次表没有关联么?

#4


有的话其实就是简单的case when 判断吧

#5


判断  第一次打卡时间小于上班时间则是迟到 第二次上班时间小于下班时间 就是早退  否则就是正常

#6


判断语句写好了,我把表结构也改了
create table kaoqing(
kaoqingid int identity(1,1),
username varchar(9) not null,--网页自动获取并插入数据
userip varchar(16) not null,--网页自动获取并插入数据
ktime datetime default(getdate()),
kaostate varchar(15)---考勤状态,分为迟到,正常,早退.由数据库判断
)
create table banci(
banciid int,
name varchar(12) not null,
stime time(7) not null,---上班时间08:00.下班时间17:00
xtime time(7) not null,---一天2次卡,中午休息不打卡.
)


判断语句为:
SELECT
       CASE 
       WHEN CONVERT(varchar(100), ktime, 24)<=CONVERT(varchar(10),stime,120)and CONVERT(varchar(100), ktime, 24) between '07:00:00' And CONVERT(varchar(10),stime,120) THEN '正常上班'
       WHEN CONVERT(varchar(100), ktime, 24)<CONVERT(varchar(10),xtime,120)and CONVERT(varchar(100), ktime, 24) between CONVERT(varchar(10),stime,120) And CONVERT(varchar(10),xtime,120) THEN '迟到'
       WHEN CONVERT(varchar(100), ktime, 24)>CONVERT(varchar(10),xtime,120) THEN '正常下班'
       ELSE null END kaoqing,kaoqingid,stime,ktime,xtime,username FROM kaoqing,banci where kaoqing.username=banci.name

我的考勤表除了考勤状态外其它的都是网页自动获取数据并插入数据库的.我的想法是写一个触发器在kaoqing这个表插入数据时,根据判断语句,更新考勤状态.请高手们帮个忙,支支招.