C# 如何仅获取日期的年和月部分进行比较?
在我的应用程序中,我想计算当前年份和月份相同的记录数。因此,我的逻辑是将当前年份和月份与表中需要的日期列进行比较。 我是这样做的:C# 如何仅获取日期的年和月部分进行比较?,c#,mysql,date,datetime,C#,Mysql,Date,Datetime,在我的应用程序中,我想计算当前年份和月份相同的记录数。因此,我的逻辑是将当前年份和月份与表中需要的日期列进行比较。 我是这样做的: using (MySqlConnection con = new MySqlConnection(serverstring)) { con.Open(); string query = "SELECT * FROM tblOrder WHERE date_needed=@dateTimeNow"; using (
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());
}
}
}
我知道它不起作用,因为在我的messagebox中,它显示的是零而不是一条记录。您认为问题出在哪里?您应该提供一个完整的日期作为日期时间,而不进行格式化-在向数据库发送参数值并使用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";
您应该提供一个完整的日期作为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";
如果要获取sql中的行数,请使用 但需要在@dateTimeNow中传递完整的日期值
如果要获取sql中的行数,请使用 但需要在@dateTimeNow中传递完整的日期值
如果您想在MySQL端完成这一切,请尝试以下方法:
SELECT *
FROM tblOrder
WHERE EXTRACT(YEAR_MONTH FROM date_needed) = EXTRACT(YEAR_MONTH FROM CURRENT_DATE)
要使其适合您的@dateTimeNow参数(在.NET中格式为yyyy MM),这意味着年份带有世纪,后面是破折号,后面是两位数的月份,请执行以下操作:
SELECT *
FROM tblOrder
WHERE @dateTimeNow = DATE_FORMAT(date_needed, '%Y-%m')
如果您想在MySQL端完成这一切,请尝试以下方法:
SELECT *
FROM tblOrder
WHERE EXTRACT(YEAR_MONTH FROM date_needed) = EXTRACT(YEAR_MONTH FROM CURRENT_DATE)
要使其适合您的@dateTimeNow参数(在.NET中格式为yyyy MM),这意味着年份带有世纪,后面是破折号,后面是两位数的月份,请执行以下操作:
SELECT *
FROM tblOrder
WHERE @dateTimeNow = DATE_FORMAT(date_needed, '%Y-%m')
您想在SQL或CIs date_中比较它,真的需要一个以yyyy MM格式存储日期的varchar字段吗?@RajeevKumar,我想比较mySQL数据库表tblOrder中的当前时间和所需的列date_,所以我有这个查询字符串query=SELECT*FROM tblOrder Where date_needed=@dateTimeNow@V4Vendetta不,它是日期格式的。我想那是行不通的。你必须将所需的LHS日期格式化为你正在传递的格式,就像你想在SQL或CIs日期中进行比较一样。你真的需要一个以yyyy-MM格式存储日期的varchar字段吗?@RajeevKumar,我想将mySQL数据库表tblOrder中的当前时间与所需的列date_进行比较,因此我有一个查询字符串query=SELECT*FROM tblOrder,其中date_needed=@dateTimeNow@V4Vendetta不,这是一种日期格式。我想那是行不通的。你需要将LHS日期格式化为你要传递的格式