1

特定の生年月日から年月を取得しようとしています。現在、私のコードは次のようになっています。

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;

そして、私が理解している10進数(58.6など)の年齢出力が得られますが、その.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;

年の時期に応じて負の値と正の値の両方を考慮する必要があるため、SQL の 2 つの日付間の完全な月数の計算から関数を借用しました...月も行うためのより良い方法があると確信しています、年は最適なはずです。

これが SQL Plus で機能することを願っています! 同じコンセプトだけど。

于 2013-02-13T20:36:28.650 に答える