如何从MySQL查询中提取日期的月份名称

时间:2018-10-10 09:38:51

标签: c# mysql

我有此查询,该查询检查同一个月内重复四次或四次以上的数据。我需要从中提取月份名称或数字并将其传递给stringint

MySqlConnection connect = new MySqlConnection(MyConString);
string query = "SELECT agentlogin, COUNT(agentlogin), LAST_DAY(`date`) AS Month FROM pending WHERE agentlogin = @login GROUP BY LAST_DAY(`date`) HAVING COUNT(agentlogin) >= 4";
MySqlCommand comm = new MySqlCommand(query, connect);
comm.Parameters.AddWithValue("@login", Label1.Text);
connect.Open();
MySqlDataReader rdr = comm.ExecuteReader();
while (rdr.Read())
{
    lblmsg.Text = "GrpM Alert!";
    string getMonth = ?;
}

那我该怎么做呢?

谢谢。

3 个答案:

答案 0 :(得分:2)

读取Month字段并将其format命名为

while (rdr.Read())
{
    DateTime date = rdr.GetDateTime("Month"); 
    string getMonth = date.ToString("MMM");
}

答案 1 :(得分:1)

最简单的方法是:

string getMonth = rdr["Month"].ToString();

然后将LAST_DAY(date)替换为MONTH(LAST_DAY(date))或类似MONTH(date)之类的变体。

在使用rdr.Read()读取查询的每一步中,您都可以通过MySqlDataReader对象访问当前行字段 就像数组/字典:rdr[int i]一样使用它,其中i是行或rdr[string fieldName]中字段的索引, 其中fieldName是要从特定行中获取的列的名称。

答案 2 :(得分:0)

我认为您应该按月份,年份,座席登录信息进行分组,然后仅选择年份和月份。在这种情况下,我们可以使用DATE_FORMAT

SELECT
    DATE_FORMAT(date, '%Y-%m') AS yearmonth
FROM pending
WHERE
    agentlogin = @login
GROUP BY
    agentlogin,     -- optional, but included for correctness
    DATE_FORMAT(date, '%Y-%m')
HAVING
    COUNT(*) >= 4;

请注意,如果登录碰巧匹配一个多月,则此值可能会返回一个多月的值。

while (rdr.Read())
{
    lblmsg.Text = "GrpM Alert!";
    int monthNumber = rdr.GetString("yearmonth");
}

想要按年份月分组的原因是不同的年份可能具有相同的月份,在这种情况下,您可能不想将它们报告为同一事物