gpt4 book ai didi

c# - 如何只获取日期的年份和月份部分进行比较?

转载 作者:行者123 更新时间:2023-11-29 04:23:38 25 4
gpt4 key购买 nike

在我的应用程序中,我想计算具有相同当前年份和月份的记录数。所以我的逻辑是将当前年份和月份与我表中的 date_needed 列进行比较。这是我的做法:

using (MySqlConnection con = new MySqlConnection(serverstring))
{
con.Open();
string query = "SELECT * FROM tblOrder WHERE date_needed=@dateTimeNow";
using (MySqlCommand cmd = new MySqlCommand(query, con))
{
cmd.Parameters.AddWithValue("@dateTimeNow", DateTime.Now.ToString("yyyy-MM")); using (MySqlDataReader dr = cmd.ExecuteReader())
{
int count = 0;
while (dr.Read())
{
count++;
}
MessageBox.Show(count.ToString());
}
}
}

我知道它不起作用,因为在我的消息框中它显示零而不是一条记录。您认为问题出在哪里?

最佳答案

您应该提供一个完整的日期(作为 DateTime,不要对其进行格式化 - 将参数值发送到数据库时,文本转换几乎总是一个坏主意)并使用用于比较值的 MySQL 日期/时间函数。

例如:

string query = @"SELECT * FROM tblOrder 
WHERE MONTH(date_needed) = MONTH(@dateTimeNow)
AND YEAR(date_needed) = YEAR(@dateTimeNow)";

或者,您可以将月份和年份作为单独的参数传递:

string query = @"SELECT * FROM tblOrder 
WHERE MONTH(date_needed) = @month
AND YEAR(date_needed) = @year";

或者 - 可能更高效 - 你可以给出起点和终点:

string query = @"SELECT * FROM tblOrder 
WHERE date_needed >= @start AND date_needed < @end";

在这里,您将 @start 设置为本月的开始,将 @end 设置为下个月的开始。您可以将它们计算为:

// Consider using UtcNow.Date instead. Basically, think about time zones.
DateTime today = DateTime.Today;
DateTime start = new DateTime(today.Year, today.Month, 1);
DateTime end = start.AddMonths(1);

关于c# - 如何只获取日期的年份和月份部分进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16579978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com