繁体   English   中英

在SQL Server中存储DayOfWeek数据

[英]Store DayOfWeek data in SQL Server

我想将DayOfWeek数据另存为SQL Server表中的一列。 这可能吗? ATM我正在保存一个int并使用switch方法转换为DayOfWeek,但我希望我可以直接从数据库中保存和检索数据。

更新,我将尝试解释。 用户创建一个周期性事件,通常每周两次,例如,星期一和星期五。 我想在给定的月份中创建(在代码运行时)所有重复发生的事件,所以我想将DayOfWeek存储在SQL中,因为对于每个事件,用户都可以注册(如果有另一个用户,则是迟到的,等等)。编码:

public static List<int> GetAttendance(int year, int month, DayOfWeek doW_1, DayOfWeek doW_2)
        {
            var days = DateTime.DaysInMonth(year, month);
            var attendances = new List<int>();

            for (int currentDay = 1; currentDay <= days; currentDay++)
            {
                var day = new DateTime(year, month, currentDay);
                if (day.DayOfWeek == doW_1 || day.DayOfWeek == doW_2)
                {
                    attendances.Add(currentDay);
                }
            }

            return attendances;
        }

doW1和2来自我制作的一个小转换器方法,他们在db中读取用户存储的整数以创建重复事件。

更新2:我想以这种方式存储数据,因为我将通过用户输入将其用于PREDICT未来事件。 现在清除吗?

您有两个选择。

  1. 将日期值存储在Date或DateTime列中,并在查询时使用where子句编写查询,例如

     WHERE DATENAME(WEEKDAY, DateColumn ) = 'Sunday' 

但这不是一个可靠的表达式,并且在更大的数据集上,查询性能将很差。

  1. 您还可以将工作日存储在Varchar(9)列中,并再次使用DATENAME()从插入/更新时的日期值中提取工作日名称。

您可以索引此列并编写简单的查询,例如

SELECT * FROM Table
WHERE DateColumName = 'Sunday'

此选项通常用于数据仓库环境,在该环境中,减少数据冗余不是目标,但以最佳读取性能为目标。

继续将其存储为一个int,但是您可以通过仅将已保存的int转换为以下方式来摆脱开关:

DayOfWeek day = DayOfWeek.Friday;

int temp = (int)day;

day = (DayOfWeek)temp;

Console.WriteLine(day); // Friday

将其另存为“日期”列,并使用以下SQL函数来解析WeekDay ID或WeekDay名称。

使用日期可以使您的数据结构易于理解。

SELECT Datepart(weekday, Getdate()) 
SELECT Datename(weekday, Getdate()) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM