【发布时间】:2013-12-23 10:32:09
【问题描述】:
我的 sql 表包含许多人的出生日期。日期格式为 mm/dd/yyyy。我想选择未来 30 天内生日的人的详细信息。我为此使用以下查询,
SELECT Mem_FirstNA, Mem_LastNA, Mem_DOB FROM MemberDetails WHERE
ltrim(str(year(GETDATE()))) + -' + ltrim(str(month(Mem_DOB))) + '-' +
ltrim(str(day(Mem_DOB))) >= getdate() - 1 AND
ltrim(str(year(GETDATE()))) + '-' + ltrim(str(month(Mem_DOB))) + '-' +
ltrim(str(day(Mem_DOB))) <= getdate() + 30
完整的代码是
public List<MemberData> GetThisMonthBirthday()
{
List<MemberData> MD = new List<MemberData>();
using (SqlConnection con = new SqlConnection(Config.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("SELECT Mem_FirstNA, Mem_LastNA, Mem_DOB FROM MemberDetails WHERE ltrim(str(year(GETDATE()))) + '-' + ltrim(str(month(Mem_DOB))) + '-' + ltrim(str(day(Mem_DOB))) >= getdate() - 1 AND ltrim(str(year(GETDATE()))) + '-' + ltrim(str(month(Mem_DOB))) + '-' + ltrim(str(day(Mem_DOB))) <= getdate() + 30", con))
{
try
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
MemberData mb = new MemberData();
mb.Mem_NA = (string)reader["Mem_FirstNA"];
mb.Mem_LastNA =(string)reader["Mem_LastNA"];
mb.Mem_DOB = (Convert.ToDateTime(reader["Mem_DOB"]));
MD.Add(mb);
}
}
catch (Exception e) { throw e; }
finally { if (con.State == System.Data.ConnectionState.Open) con.Close(); }
return MD;
}
}
问题是这个检查只到 12 月 31 日,如果人的生日是 01/01/1987 ,则查询没有选择该详细信息。请帮我解决这个问题。谢谢
【问题讨论】:
-
假设您要在 SQL 中执行此操作,它与 C# 有什么关系?
-
将您的出生日期字符串转换为真实日期并使用 dateadd() 提前 30 天
-
@JonSkeet:我正在使用 c# 做我的项目
-
是的,您有一些 C# 代码 - 但您想要回答的问题是只是在 SQL 中,对吗?您不想获取每个人的记录并在 C# 中进行过滤。所以C#部分是无关紧要的。此外,您的编辑将 SQL 全部放在一行中,非常更难阅读。