c# - 给定一个人的年龄,如何从 SQL 语句返回生日

标签 c# asp.net sql sql-server database

我正在尝试在 ASP.net 中创建一个过滤器,用户可以在其中选择特定年龄,SQL 语句将根据“DOB”(出生日期)返回当前处于该年龄的所有用户字段。

因此,例如,假设我有一个变量 age,它当前包含 23。我在数据库中有一个名为“DOB”的字段,类型为“date”。如何编写一条 SQL 语句来返回所有出生日期为 23 的记录? DOB 格式为 YYYY-MM-DD。

谢谢

最佳答案

WHERE YEAR(GETDATE() - DATEPART(dy, DOB) + 1) - YEAR(DOB) = 37

只需将 37 更改为 23 或更好地使用变量

这是一个你可以运行的例子

CREATE TABLE #test(DOB DATETIME)

INSERT #test VALUES('19701127')
INSERT #test VALUES('19741127')
INSERT #test VALUES('19740227')
INSERT #test VALUES('19761127')
INSERT #test VALUES('19761127')
INSERT #test VALUES('19701127')


SELECT * FROM #test
WHERE YEAR(GETDATE() - DATEPART(dy, DOB) + 1) - YEAR(DOB) = 37

1974-11-27 00:00:00.000
1974-02-27 00:00:00.000

您还可以使用这个更复杂的 WHERE 子句

 SELECT *
        FROM #test
        WHERE DATEDIFF(YEAR, DOB, GETDATE()) -
        CASE WHEN DATEPART(mm,DOB) > DATEPART(mm,GETDATE())
       OR (DATEPART(mm,DOB) = DATEPART(mm,GETDATE())
       AND DATEPART(dd,DOB) > DATEPART(dd,GETDATE()))
        THEN 1 ELSE 0 END = 37

关于c# - 给定一个人的年龄,如何从 SQL 语句返回生日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9437898/

相关文章:

c# - 如何使用c#获取包含特定文件的目录列表

c# - 将 Null 值插入到 SQL 表中

c# - 为什么 ASP.NET 编译器会在每次构建时重建所有二进制文件?

c# - 如何在回发后隐藏 Rad 组合框?

php - 在 PHP 中创建搜索表单

c# - 检查 .NET 动态程序集是暂时的还是持久的

c# - 并行执行使用异步的循环

c# - 在 Outlook 约会的 ICS 文件中添加 HTML

sql - 如何获取关系数据库中2个随机表之间的关系

sql - mariadb json中json_table的正确使用