Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅获取日期的年和月部分进行比较?_C#_Mysql_Date_Datetime - Fatal编程技术网

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日期格式化为你要传递的格式