【问题标题】:How can I get a list of students with a birthday in the current month?如何获取当月生日的学生名单?
【发布时间】:2019-09-29 18:42:23
【问题描述】:

我写了代码,但我可以得到所有的日期。如何获取当前月份的日期?

String connectionString = @"data source = localhost; initial catalog = StudentsBirthday; integrated security = SSPI;";
SqlConnection con = new SqlConnection(connectionString);
List<DateTime> birthdays = new List<DateTime>();

using (con)
{
    con.Open();
    SqlCommand cmd = new SqlCommand("Select Birthday From Students",con);
    SqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        birthdays.Add(reader.GetDateTime(0));
    }
}

foreach (DateTime Birthday in birthdays)
{
    Console.WriteLine(Birthday);
}

Console.ReadKey();

【问题讨论】:

    标签: c# sql database


    【解决方案1】:

    您可以使用以下 SQL 查询:

    SELECT Birthday FROM Students 
    WHERE MONTH(Birthday) = MONTH(GETDATE())  
    ORDER BY Birthday
    

    这会比较来自GETDATE() 函数的生日月份和当前月份。这将按(升序)日期对生日进行排序。

    您可以像这样将其添加到您的代码中:

    var sqlQuery = "SELECT Birthday FROM Students WHERE MONTH(Birthday) = MONTH(GETDATE()) ORDER BY Birthday"
    SqlCommand cmd = new SqlCommand(sqlQuery,con);
    

    【讨论】:

    • 获取当前月份的所有生日,不考虑年份。
    • @gsharp 我想这取决于 OP 想要什么。为什么我们也需要考虑这一年?如果他们想知道这个月有哪些学生过生日,他们出生在哪一年重要吗?
    • @haldo 实际上是真的 :-) 很抱歉投反对票...真的取决于 OP 想要什么。只要允许我就会投票赞成。
    • @haldo 实际上,如果您想从当年获得它。我猜它不会是学生...... :-p
    • 这是non-sargable query。它将强制进行表扫描而不使用索引。表格中的行越多,速度就越慢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2019-08-08
    相关资源
    最近更新 更多