【发布时间】:2013-08-15 04:19:19
【问题描述】:
我目前正在制作一个计算机化的工资单系统,但我不知道应该使用什么查询来检查员工在假期期间是否在场。
我所做的是我创建了这个查询:
CREATE TABLE Holidays
(
id INT PRIMARY KEY IDENTITY,
holidayName VARCHAR(55),
holidayDate DATE <---- This is my problem
);
CREATE TABLE EmployeeHolidays
(
id INT PRIMARY KEY IDENTITY,
employeeId INT FOREIGN KEY REFERENCES Employees(id),
holidayId INT FOREIGN KEY REFERENCES Holidays(id),
workingDate DATE,
employeeTimeIn TIME,
employeeTimeOut TIME
);
现在问题在于在 Holidays.holidayDate 中插入 DATE,因为我必须插入年份,即使我只需要月份来使用 C# 为 EmployeeHolidays 执行条件语句。
我应该使用什么方法来解决这个问题?我应该只输入一个虚拟年份作为Holidays.holidayDate 的输入吗?我是否应该将 Holidays.holidayDate 设为 VARCHAR 并将其与当前年份一起解析为 DATE 数据类型?对于这种方法,我应该使用哪些查询?
【问题讨论】:
-
我很好奇为什么
holidayDate不应该有年份部分。 -
您可以创建一个函数
IsHoliday并一起删除假期表,我发现最难的部分是计算复活节。或者这可能都是更大的日历表的一部分,该表具有IsHoliday、IsWeekEnd等,这对于此类应用程序似乎很有用 -
很多假期——总统日、斋月、感恩节——每年都会改变日期。拥有静态的“示范假期”可能不是最好的方法。在类似的情况下,我创建了一个存储过程,它将生成给定年份的假期(如果它们不存在于表中),然后我将匹配日期与日期。结果很好。使用起来效率更高,因为您可以使用直接 SQL 连接逻辑来检查一天是否是假期。
-
FWIW,我遇到了完全相同的问题,最终创建了一个日历表,其中包含一个带有原因字段的 WorkingDay 标志。我个人允许工资单管理假期,但实际上并没有太多(我的公司在美国,只在最常见的假期放假)需要自动化。事实证明,它难以置信地方便并且几乎简化了我的所有报告。在使用这些类型的系统时,您通常会发现自己围绕日历构建报告。
标签: c# sql sql-server tsql sql-insert