我有此查询,该查询检查同一个月内重复四次或四次以上的数据。我需要从中提取月份名称或数字并将其传递给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 = ?;
}
那我该怎么做呢?
谢谢。
答案 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");
}
想要按年份和月分组的原因是不同的年份可能具有相同的月份,在这种情况下,您可能不想将它们报告为同一事物