我试图从给定的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)我理解,但我需要将.6转换成一个月的某种方式。
我在想我做这种转换的方法效率不高,但我一直在寻找解决方案的时间,但无济于事。我见过DATEDIFF,但在尝试使用它时,我一直收到无效的标识错误。
有什么想法吗?
答案 0 :(得分: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;
祝你好运。
答案 1 :(得分: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!同样的概念。