[英]How to display data from a specific week?
我想通過指定日期顯示特定星期的數據,例如2015-06-01
這是我想用來獲得一周的桌子
BookingID CheckInDate CheckOutDate
1 2015-05-25 2015-05-31
2 2015-05-26 2015-06-03
3 2015-06-01 2015-06-07
4 2015-06-01 2015-06-12
這是我的數據庫管理器代碼,用於按周獲取數據:
public static ArrayList GetStatsByWeek(int week, int year)
{
SqlConnection conn = new SqlConnection();
SqlCommand comm = new SqlCommand();
ArrayList rmCount = new ArrayList();
try
{
conn.ConnectionString = GSM_CONN_STR;
conn.Open();
comm.Connection = conn;
comm.CommandText = "SELECT COUNT(BookingID) as \"TotalCount\" FROM CheckInOut WHERE DATEPART(WEEK,CheckInDate)=@week OR DATEPART(WEEK,CheckOutDate)=@week AND YEAR(CheckInDate)=@year AND Year(CheckOutDate)=@year";
comm.Parameters.AddWithValue("@week", week);
comm.Parameters.AddWithValue("@year", year);
SqlDataReader dr = comm.ExecuteReader();
while (dr.Read())
{
RoomCounts r = new RoomCounts();
r.TotalCount = (int)dr["TotalCount"];
rmCount.Add(r);
}
dr.Close();
}
catch (SqlException e)
{
throw e;
}
finally
{
conn.Close();
}
return rmCount;
}
這是我的密碼
DateTime date = Convert.ToDateTime(tbxStrtDate.Text);
double totalPercentage;
double totalCount = 0;
int flr2Count = 0;
int flr3Count = 0;
CultureInfo cul = CultureInfo.CurrentCulture;
int num = cul.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Sunday);
//Retrieve all the data
ArrayList rmC = HotelDB.GetStatsByWeek(num, date.Year);
錯誤已解決,現在有數據問題。
例如,如果我在tbxStrtDate
輸入2015-05-27
並進行檢索,即使該周內有數據,也不會顯示任何數據。
你有結帳日期嗎
tbxStrtDate是2015-05-27
該查詢正在檢查同一年的結帳日期,如果記錄中沒有結帳日期,則將無法正確匹配該日期。
AND YEAR(CheckInDate)=@year AND Year(CheckOutDate)=@year";
這意味着要完全匹配的每個記錄必須具有一個checkindata和一個checkoutdate
我認為您的問題與Logical Operator Precedence
:
當在一個語句中使用多個邏輯運算符時,將首先對
NOT
求值,然后對AND
求值,最后對OR
求值。 算術和按位運算符在邏輯運算符之前進行處理。
你有這樣的事情:
p OR q AND r AND s
那和
p OR ((q AND r) AND s)
我想您想要:
(((p OR q) AND r) AND s)
-- or
(p OR q) AND r AND s
因此,請嘗試以下操作:
WHERE
(DATEPART(WEEK, CheckInDate) = @week
OR DATEPART(WEEK, CheckOutDate) = @week)
AND YEAR(CheckInDate) = @year
AND YEAR(CheckOutDate) = @year
注意 :
當datepart是week
(wk
,ww
)或weekday
(dw
)時,返回值取決於使用SET DATEFIRST
設置的值每年的1月1日定義星期日期部分的起始數字,例如:
DATEPART (wk, 'Jan 1, xxxx') = 1
,其中xxxx是任何年份。
因此,您需要SET DATEFIRST
。
您的查詢非常好。
問題是您的c#方法和SQL Server Datepart
函數中的“周數計算”不同。
您的函數給出的周數= 21,而Datepart
給出的周數= 22。
因此,沒有匹配的結果是您的查詢。
嘗試按照以下@week
在您的代碼中計算@week
。 它與我的測試數據配合使用。
int num = cul.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
如果您在周計算中特定於CalendarWeekRule.FirstFourDayWeek
,則需要查找對應的SQL等效項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.