0

Oracle11g DB の現在または今日の日付と時刻に基づく会計年度のエントリが必要です。

今日の日付が 2013 年 4 月 1 日であると仮定すると、01-APR-13およびとして出力が必要31-MAR-14です。

考慮される要件の会計年度は、4 月 (当年) から 3 月 (翌年) までです。

現在の日時に基づく...出力のシナリオは、上記の期間または期間に該当する現在の日時に依存します。

別の例: 今日の日時を 2012 年 12 月 28 日にすると、 and として出力が必要に01-APR-12なり31-MAR-13ます。

SQLのみを使用して非常に短い形式で同じことを達成する方法を教えてください。

下の表を次のように考えてください。

Create table venky (financialYearFrom DATE NOTNULL, financialYearTo DATE NOTNULL);
4

2 に答える 2

3

何か醜い:

   SELECT to_date('1-APR-'||(to_char(sysdate,'yyyy')+
                                (case when to_char(sysdate,'mm')>3 
                                 then 0 
                                 else -1 
                                 end))) AS start_date ,
      to_date('31-MAR-'||(to_char(sysdate,'yyyy')+
                                 (case when to_char(sysdate,'mm')>3 
                                  then 1 
                                  else 0 
                                  end))) end_date 
   FROM dual;

その後、 (end_of_period) にmonth > 3年を追加する場合は、 (start_of_period) から年を減算します。31-MAR1-APR

更新:より良いもの:

select add_months(trunc(add_months(sysdate,-3),'yyyy'),3) as start_date ,
    add_months(trunc(add_months(sysdate,-3),'yyyy'),15)-1 as end_date 
   from dual

3 か月を引くと、正しい開始年になります。年に切り捨てて 3 か月を追加すると、1 APR になります。end_of period は、12 か月先の開始日から 1 日を引いたものです。

于 2012-12-28T07:51:19.747 に答える
1

これはSQL SERVERの例です。Oracleでそれを行う方法を見つけます(どちらも構文のマイナーな違いと同じです)

CREATE FUNCTION [dbo].[getYear] 
(
    -- Add the parameters for the function here
    @CurDate DATETIME
)
RETURNS VARCHAR(MAX)
AS
BEGIN
    DECLARE @Y int;
    SELECT @Y = CASE WHEN MONTH(@CurDate) <= 3 THEN YEAR(@CurDate) - 1 ELSE YEAR(@CurDate) END;

    RETURN '01-APR-' + LTRIM(STR(@Y)) + ' and 31-MAR-' + LTRIM(STR(@Y+1));
END

そして、このように使用します

Select dbo.GETYEAR(GETDATE());
于 2012-12-28T08:00:47.997 に答える