我目前正在嘗試通過選擇SQL語句來執行一個組。我想要做的是在一年內有12個月。在一個月內,我總結了所有傳出的項目並將其顯示爲條形圖。下面是我如何設置我的SQL語句:在SQL語句中按月分組
public List<ProductPacking> getSumProductByMonth(string prodName)
{
List<ProductPacking> ft = new List<ProductPacking>();
using (var connection = new SqlConnection(FoodBankDB.connectionString))
{
SqlCommand command = new SqlCommand("SELECT SUM(Convert(INT, ddi.productQuantity)) AS totalQuantity, p.name, month(d.deliveryDate) AS deliveryMonth FROM dbo.DistributionDistributedItems ddi " +
" INNER JOIN dbo.ProductVariants pv ON ddi.productVariant = pv.id " +
" INNER JOIN dbo.Products p ON pv.product = p.id " +
" INNER JOIN dbo.Distributions d ON ddi.distribution = d.id " +
" WHERE p.name = '" + prodName + "' AND year(deliveryDate) < GETDATE() " +
" GROUP BY p.name, month(d.deliveryDate)", connection);
connection.Open();
using (var dr = command.ExecuteReader())
{
while (dr.Read())
{
DateTime deliveryMonth = DateTime.ParseExact(dr["deliveryMonth"].ToString(), "MMMM", CultureInfo.InvariantCulture);
ft.Add(new ProductPacking(Convert.ToInt32(dr["totalQuantity"].ToString()), deliveryMonth));
}
}
}
return ft;
}
在調試模式下,它返回我deliveryMonth爲1/1/0001 12:00:00 AM這是不正確的。我確信我在數據庫中存儲了正確的日期格式。我測試了查詢並返回了正確的數據。只是日期格式有誤。
我試圖格式化日期爲一月,二月等等。但是,它返回了一條錯誤消息,即String未被識別爲有效的DateTime。我想知道爲什麼會這樣,因爲我設法按年來解析,這是我的另一個功能。
在此先感謝。
'一個月(d.deliveryDate)'返回一個帶有月份數的「int」。您無法將其直接轉換爲DateTime,因爲它缺少年/日。 – wdosanjos