Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据星期几过滤数据库中的数据?_C#_Sql_Asp.net - Fatal编程技术网

C# 如何根据星期几过滤数据库中的数据?

C# 如何根据星期几过滤数据库中的数据?,c#,sql,asp.net,C#,Sql,Asp.net,我的数据库中有一个列,它在不同的星期为我的联系人保存一个字符串 例如:联系人1在周一和周三工作 因此,在Week\u Day列中,联系人1的字符串是“星期一、星期三”。我试图只显示在一周的当前一天工作的行,代码如下。我尝试在子句中使用,但它不起作用,因为我没有一周中要筛选的固定日期。救命啊 string today = DateTime.Today.ToString("MM-dd-yy"); string day = DateTime.Today.DayOfWeek.ToString(); s

我的数据库中有一个列,它在不同的星期为我的联系人保存一个字符串

例如:联系人1在周一和周三工作

因此,在
Week\u Day
列中,联系人1的字符串是“星期一、星期三”。我试图只显示在一周的当前一天工作的行,代码如下。我尝试在子句中使用
,但它不起作用,因为我没有一周中要筛选的固定日期。救命啊

string today = DateTime.Today.ToString("MM-dd-yy");

string day = DateTime.Today.DayOfWeek.ToString();
string find = "select convert(varchar(8), start, 10) AS start, convert(varchar(8), end_date, 10) AS end_date, ContactName, DepartmentName, Hours, Phone, Week_Day from Schedule join Contacts on Schedule.ContactId = Contacts.ContactId inner join Departments on Contacts.DepartmentId = Departments.DepartmentId where @Current BETWEEN start AND end_date AND Week_Day IN (@Day)";
SqlCommand comm = new SqlCommand(find, con);
comm.Parameters.Add("@Current", SqlDbType.Date).Value = today;
comm.Parameters.Add("@Day", SqlDbType.NVarChar).Value = day;

con.Open();
comm.ExecuteNonQuery();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = comm;
DataSet ds = new DataSet();
da.Fill(ds);
GridView3.DataSource = ds;
GridView3.DataBind();

con.Close();

您可以得到一周中的当前日期(名称),如下所示:

然后,您可以在
WHERE
查询中使用类似
。将查询更改为具有:

WHERE Week_Day LIKE @day
并为
@day
添加参数,以在开始和结束时包括
%

comm.Parameters.Add("@Day", SqlDbType.NVarChar).Value = "%" + day + "%";


注意:正如一些评论已经提到的,最好不要以这种方式将数据存储在单个字符串列中,但我已经根据您的问题给出了答案。

可能是使用DateName()和CharIndex()进行的


如果可以,最好将其存储为位字段,因此5是星期一和星期三(二进制101),您可以对位0执行位字段检查,以查找所有在星期一工作的人员,即
WHERE(WeekDay和1)=1
,实际上最好使用一个单独的表来为工作日分配人员。这样,数据库服务器可以在执行@musefan的可查询副本时使用索引。我同意,一切都会改变。GetDate()很容易成为用户提供的日期(始终是我的首选)。^我的评论似乎已消失,我没有删除它。。。。奇怪的
comm.Parameters.Add("@Day", SqlDbType.NVarChar).Value = "%" + day + "%";
Where CHARINDEX(DateName(WEEKDAY,GetDate()),Week_Day)>0 and...