-2

我想找一位年满 70 岁零 6 个月的员工。也就是说,他应该在当年的 01/01 和 12/31 之间达到 70 岁零 6 个月。请帮忙。

我的表有员工的出生日期,数据类型 DATE。数据库系统 DB2。

4

4 回答 4

1

我们知道员工将在今年达到 70 岁零 6 个月时:

  • 出生年份比当年早70年,出生月份不迟于6月
  • 或 出生年份比当年早 71 岁,出生月份不早于 7 月。

因此我们必须这样过滤:

SELECT Name FROM Employees
WHERE DateOfBirth BETWEEN '7/1/' + CAST((YEAR(GETDATE())-71) AS varchar) AND '7/1/' + CAST((YEAR(GETDATE())-70) AS varchar)
于 2013-09-05T18:51:43.080 回答
0

Try step by step.

If person becomes 70.5 years old on 2013-01-01, then his birthday is 1942-07-01. If person becomes 70.5 years old on 2013-12-31, then his birthday is 1943-06-30.

Calculate these values in your programming language. Then

SELECT * FROM empleyees WHERE birstday >= '1942-07-01' AND birstday  <= '1943-06-30';
于 2013-09-05T18:51:15.307 回答
0

(A.BRTH_DT BETWEEN (SUBSTR (CHAR(DATE(&CURRDATE) - 71 YEARS),1,4)||'-07-01') AND (SUBSTR (CHAR(DATE(&CURRDATE) - 70 YEARS),1,4 )||'-06-30')

此 SQL 用于获取年龄为 70.5 的员工。&CURRDATE 指的是当前日期。

于 2013-09-06T09:11:27.603 回答
0

您使用的是什么 RDBMS。答案需要日期函数,每个 RDBMS 都使用自己专有的日期函数。

在 SQL Server 中,您可以

Select case When birthdate Between
    DateAdd(month, -6, Dateadd(year, -70, dateadd(dd, 1 + 
                   datediff(dd, 0, getdate())-datepart(dy,getdate()), 0)))
And DateAdd(month, 6, Dateadd(year, -70, dateadd(dd, 
                   datediff(dd, 0, getdate())-datepart(dy,getdate()), 0)))
于 2013-09-05T19:07:32.350 回答