1

我试图从给定的 DOB 中获取以年和月为单位的年龄。现在,我的代码如下所示:

COLUMN name FORMAT A25
SELECT sNo, fName||CHR(13)||lName Name, sex, TRUNC((CURRENT_DATE - dob) / 365.24, 1) Age
FROM Staff
WHERE position IN ('Manager', 'Secretary')
ORDER BY age DESC;

它给了我十进制数字(例如 58.6)的年龄输出,我理解,但我需要以某种方式将 0.6 转换为一个月。

我认为我进行这种转换的方法不是最有效的,但我一直在寻找解决方案数小时,但无济于事。我见过 DATEDIFF,但在尝试使用它时不断收到无效标识符错误。

有任何想法吗?

4

2 回答 2

1

像这样的东西怎么样:

SELECT sNo, fName||CHR(13)||lName Name, sex, 
  TRUNC((CURRENT_DATE - dob) / 365.24, 1) Age,
  TRUNC(MONTHS_BETWEEN(CURRENT_DATE, dob) / 12) YEARS,
  MOD(TRUNC(MONTHS_BETWEEN(CURRENT_DATE, dob)), 12) MONTHS
FROM Staff
WHERE position IN ('Manager', 'Secretary')
ORDER BY age DESC;

这是SQL Fiddle

这也应该让你过上好日子:http ://sqlfiddle.com/#!4/f3a57/4

SELECT sNo, fName||CHR(13)||lName Name, sex, 
  TRUNC((CURRENT_DATE - dob) / 365.24, 1) Age,
  TRUNC (MONTHS_BETWEEN (CURRENT_DATE, dob) / 12) YEARS,
  MOD (TRUNC (MONTHS_BETWEEN (CURRENT_DATE, dob)), 12) MONTHS,
  TO_DATE (CURRENT_DATE) - 
      ADD_MONTHS (dob,TRUNC (MONTHS_BETWEEN (CURRENT_DATE, dob))) DAYS
FROM Staff
WHERE position IN ('Manager', 'Secretary')
ORDER BY age DESC;

祝你好运。

于 2013-02-13T20:21:53.337 回答
0
SELECT sNo, fName||CHR(13)||lName Name, sex, 
 DATEDIFF(year, dob, Current_Date) - 1 + ' years & ' + dbo.FullMonthSeperation(CURRENT_DATE, dob) + ' months.' AS 'Age'
FROM Staff
WHERE position IN ('Manager', 'Secretary')
ORDER BY age DESC;

我从Calculating number of full months between two dates in SQL中借用了函数,因为你必须根据一年中的时间考虑负值和正值......我相信还有更好的方法来计算月份,年份应该是最优的。

希望这适用于 SQL Plus!不过同样的概念。

于 2013-02-13T20:36:28.650 回答