C# 在SQL Server中存储DayOfWeek数据
我想将C# 在SQL Server中存储DayOfWeek数据,c#,sql-server,dayofweek,C#,Sql Server,Dayofweek,我想将DayOfWeek数据保存为SQL Server表中的一列。这可能吗?ATM我正在保存一个int并用一个switch方法转换为DayOfWeek,但是我希望我可以直接从数据库中保存和检索数据 更新 我会尽力解释的。用户创建重复事件,通常每周2次,例如,周一和周五。我想创建(在代码运行时)给定月份内的所有重复事件,因此我想在SQL中存储DayOfWeek,因为对于每个事件,用户都可以注册其他用户是否出席、是否迟到等等。。 下面是代码的一部分: 公共静态列表获取出席人数(整数年、整数月、星期一
DayOfWeek
数据保存为SQL Server表中的一列。这可能吗?ATM我正在保存一个int并用一个switch方法转换为DayOfWeek,但是我希望我可以直接从数据库中保存和检索数据
更新
我会尽力解释的。用户创建重复事件,通常每周2次,例如,周一和周五。我想创建(在代码运行时)给定月份内的所有重复事件,因此我想在SQL中存储DayOfWeek,因为对于每个事件,用户都可以注册其他用户是否出席、是否迟到等等。。
下面是代码的一部分:
公共静态列表获取出席人数(整数年、整数月、星期一、星期二)
{
var days=DateTime.DaysInMonth(年,月);
var出席率=新列表();
对于(int currentDay=1;currentDay保持将其存储为int,但您可以通过如下方式转换保存的int来摆脱开关:
DayOfWeek day = DayOfWeek.Friday;
int temp = (int)day;
day = (DayOfWeek)temp;
Console.WriteLine(day); // Friday
将其另存为日期列,并使用以下SQL函数解析工作日ID或工作日名称
使用日期可以使数据结构易于理解
SELECT Datepart(weekday, Getdate())
SELECT Datename(weekday, Getdate())
你有两个选择
将日期值存储在日期或日期时间列中,查询时,使用where子句编写查询,如
WHERE DATENAME(WEEKDAY, DateColumn ) = 'Sunday'
但这不是一个可搜索的表达式,在更大的数据集上,查询性能会很差
您还可以将周日存储在Varchar(9)列中,然后再次使用DATENAME()
从插入/更新时的日期值中提取周日名称
您可以为该列编制索引并编写简单的查询,如
SELECT * FROM Table
WHERE DateColumName = 'Sunday'
此选项通常用于数据仓库环境,该环境的目标不是减少数据冗余,而是最佳读取性能。此上下文中DayOfWeek
数据的含义可能重复?是否要保存一周中各天的名称?如果是,请将其另存为NVARCHAR
。如果要保存保留int
数字,但显示名称,您只需添加一个带有int
s及其相应显示名称的查找表。只需存储日期。DateTime对象将告诉您该日期的道琼斯指数等。为什么是nvarchar
@lewsterin?OP是意大利语(根据其配置文件),并且在意大利语中,没有一天包含unicode字符。然而,就我个人而言,我使用了一个持久化的计算列(带有一个与日期相对的表达式)存储此数据。数据从何而来?表中的date
列,或另一个日期值?此工作通常使用日历表,其中包含下一个20年的日期,以及周、日、名、月、年、季度、报告期等的额外字段,使用您需要的多种语言。这样,您就可以要在例如意大利语中查找一周中的哪一天,需要在Date
列中加入日历表,并检索相应的列只要数据来源(.Net System.DayOfWeek enum)正确这是众所周知的。但是,有一个整数的星期日值可能会被误解,因为并非所有文化都同意将其视为一周的第一天