[英]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未来事件。 现在清除吗?
您有两个选择。
将日期值存储在Date或DateTime列中,并在查询时使用where子句编写查询,例如
WHERE DATENAME(WEEKDAY, DateColumn ) = 'Sunday'
但这不是一个可靠的表达式,并且在更大的数据集上,查询性能将很差。
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.