我正在尝试在 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/