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

时间:2016-08-11 15:51:09

标签: c# sql asp.net

我的数据库中有一个列,在我的联系人的不同工作日持有一个字符串。

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

因此,在Week_Day列中,联系人1的字符串是“星期一,星期三”。我试图只显示在当周的当天工作的行,代码如下。我尝试使用IN子句,但它不起作用,因为我没有一周的设置日我想要过滤。帮助!

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();

2 个答案:

答案 0 :(得分:2)

你可以这样得到当天的一周(姓名):

string day = DateTime.Today.ToString("dddd");

然后,您可以在WHERE查询中使用LIKE。将您的查询更改为:

WHERE Week_Day LIKE @day

并为@day添加参数,以便在开头和结尾包含%

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

More info on LIKE here

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

答案 1 :(得分:1)

可能使用DateName()和CharIndex()

Where CHARINDEX(DateName(WEEKDAY,GetDate()),Week_Day)>0 and...