如何从mysql查询中提取日期的月名

but5z9lq  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(547)

我有一个查询,它检查一个数据在同一个月重复4次或4次以上。我需要从中提取月份名称或编号并将其传递给 string 或者 int .

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 = ?;
}

那我该怎么做呢?
提前谢谢。

hs1ihplo

hs1ihplo1#

阅读 Month 字段并将其格式化为其名称

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

uplii1fm2#

我认为您应该按月份、年份和代理登录进行分组,然后只选择年份和月份。我们可以用 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");
}

之所以要按年份和月份分组,是因为不同的年份可能有相同的月份,在本例中,您可能不希望将它们报告为同一事物。

wbgh16ku

wbgh16ku3#

最简单的方法是:

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 要从特定行获取的列的名称。

相关问题