【问题标题】:SQL Best way to store the day and week or weekend day (time and attendance)SQL 存储星期几或周末的最佳方式(时间和出勤)
【发布时间】:2014-04-26 23:17:03
【问题描述】:

我有一个 sql 表,我将在其中存储每个员工的时间记录(IN 和 OUT)。

表架构是:

所以,为了更容易计算工作时间、假期、节假日等。我还想在同一张表中包含一个新字段:

  • isweekday:这会让我知道当天是否是工作日(将有助于未来的计算)

但我也想知道哪一天(星期一、星期二等)我正在考虑从 1 到 7 的 tinyint 数据类型,其中 1 是星期一,7 是星期日。

有什么建议或建议吗?在 C# 或 SQL 中,星期一是否等于一周的第一天?

【问题讨论】:

  • SQL Server 有 datepart() 函数,它已经返回星期几。包括在表中是不必要的冗余。另一方面,节日标志是个好主意。
  • 所以你认为创建一个“day”tinyint 字段来存储一天是不必要的。我在考虑这个是为了避免在服务器端做更多的数学运算。但我认为你是对的。
  • 。 .我不会说永远不会,只有 9+9% 的时间。添加 7 位标志最多会为每条记录的大小增加一个字节。如果服务器的 CPU 负载非常非常重,那么可能不调用内置函数并读取该值会带来很小的性能提升。
  • 完全同意 :),您要创建答案吗?我会检查的。

标签: c# sql sql-server


【解决方案1】:

添加isholiday 标志非常有用。另一种方法是在表中查找假期,但将数据直接放在记录中很容易。而且,因为您已经有了位标志,所以再添加一个标志可能不会使该字段变得更大。

识别星期几或周末不太有用。 SQL Server 已经提供了执行此操作的函数,特别是 datepart()datename()

在某些情况下,这些可能难以使用。例如,如果您必须编写在任何系统上运行的代码,而不管语言和本地偏好如何,那么将信息存储在记录中可能会很有用。也就是说,datepart()datename() 不是确定性的,因为它们依赖于系统参数。但是,对于大多数为一种文化编写的应用程序来说,这并不是什么大问题。

另外,在我可以想象的某些情况下,调用系统函数的开销可能大于从记录中读取值的时间。在 CPU 严重受限的环境中,您可能希望存储标志。不过,我怀疑还会有其他更重要的优化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 2018-11-01
    • 2019-04-08
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    相关资源
    最近更新 更多