コードブロックを再利用するためのよりエレガントな方法はありますか?

ピーター

私は以下のようにSQLを書くのを楽しんでいます。

利点は、複数回使用するコードブロックを再利用できることです。何かを修正するときは、常に1か所で修正するだけで済みます。

たとえばextract(sys_dateからの年)の代わりにcurrent_yearを2回書き込みます。

他の例では、to_dateの代わりにfirst_of_april_this_yearを2回書き込みます('01 .APR。 '|| current_year ||' 00:00:00 '、' DD.MON.YYYY HH24:MI:SS ')

それは機能しますが、以下に示すように、あまりきれいではなく、読みやすくありません。複数の場所で何かを修正する必要がないという利点を失わずに、読みやすくするためのより良い提案はありますか?with-clausesも使用しましたが、IMHOはさらに読みにくくなっています。どうもありがとうございました!<3

PS:ここでコードブロックを再利用するというトピックにとどまり、テスト可能な方法で前の4月1日を見つけるというこの特定のタスクがどのように改善されたかを掘り下げないでください。TY!

-- gives the latest 1st of April based on sysdate, whereas for testing sysdate can freely be set     
select 
    case when sys_date <= first_of_april_this_year then first_of_april_last_year else first_of_april_this_year end previous_first_of_april
    -- ,params3.* 
from (    
    select 
        to_date ('01.APR.'|| current_year    ||' 00:00:00', 'DD.MON.YYYY HH24:MI:SS') first_of_april_this_year,
        to_date ('01.APR.'||(current_year-1) ||' 00:00:00', 'DD.MON.YYYY HH24:MI:SS') first_of_april_last_year,
        params2.*
    from (
        select 
            extract (year from sys_date) current_year,
            params1.* 
        from
        (select 
            to_date ('02.AUG.2018 00:00:01', 'DD.MON.YYYY HH24:MI:SS') sys_date  -- for testing, sysdate can be overwritten
            --sysdate sys_date 
        from dual) params1 
    ) params2 
) params3;
骨董品

サブクエリファクタリング(別名共通テーブル式、別名CTE)を使用して、複数のサブクエリを含むクエリを読みやすくすることができます。たとえば、クエリは次のようになります。

WITH params1 AS (SELECT to_date('02.AUG.2018 00:00:01', 'DD.MON.YYYY HH24:MI:SS') sys_date -- for testing, sysdate can be overwritten
                 --sysdate sys_date 
                 FROM   dual),
     params2 AS (SELECT extract(YEAR FROM sys_date) current_year,
                        sys_date
                 FROM   params1),
     params3 AS (SELECT to_date('01.APR.' || current_year || ' 00:00:00', 'DD.MON.YYYY HH24:MI:SS') first_of_april_this_year,
                        to_date('01.APR.' || (current_year - 1) || ' 00:00:00', 'DD.MON.YYYY HH24:MI:SS') first_of_april_last_year,
                        sys_date
                 FROM   params2)
SELECT CASE
         WHEN sys_date <= first_of_april_this_year THEN
          first_of_april_last_year
         ELSE
          first_of_april_this_year
       END previous_first_of_april
FROM   params3;

余談ですが、日付に基づいて4月1日を計算することは、より簡単に行うことができます。

SELECT add_months(TRUNC(add_months(SYSDATE, -3), 'yyyy'), 3)
FROM   dual;

ここでは、指定した日付から3か月前に戻り、結果の日付をその年に切り捨てて(その年の1月1日になるように)、3か月前に戻すだけで、その年の4月1日になります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

イベント/トリガーを定期的にチェックするためのよりエレガントな方法はありますか?

分類Dev

コードを読みやすくするためにJavaブール値の名前を変更するエレガントな方法はありますか?

分類Dev

プロットMatplotlibを再利用するためのより良い方法はありますか?

分類Dev

フォームのデフォルト値をチェックするためのよりエレガントな方法はありますか?

分類Dev

コレクションをグループ化するための単一行削減のこのハッキーな実装を回避するためのよりエレガントな方法はありますか?

分類Dev

CUDAでmallocおよびfreeするためのより良い/よりクリーンな/よりエレガントな方法はありますか?

分類Dev

このビルダーをコーディングするためのよりエレガントな方法はありますか?

分類Dev

部分文字列を作成するためのよりエレガントな方法はありますか?

分類Dev

HTMLを再利用可能なブロックにする方法はありますか?

分類Dev

Pythonで辞書ループ例外を処理するためのより良いまたはよりエレガントな方法はありますか?

分類Dev

qtでキーボードショートカットの大規模なコレクションを適切に管理するためのエレガントな方法はありますか?

分類Dev

このコードよりもJavaでXMLドキュメントを文字列に変換するよりエレガントな方法はありますか?

分類Dev

改造のためにビルダーコードを再利用する方法はありますか

分類Dev

マップからリストを埋めるためのよりエレガントなソリューションはありますか?

分類Dev

React Nativeでさまざまなコンポーネントを条件付きでレンダリングするためのより良いまたはよりエレガントな方法はありますか?

分類Dev

これを書くためのよりコンパクトでエレガントな方法はありますか?

分類Dev

実行時にジョブ番号にアクセスするためのよりエレガントな方法はありますか?

分類Dev

ブロックをその左側にあるブロックに浮かせるエレガントな方法はありますか?

分類Dev

ブロックをその左側にあるブロックに浮かせるエレガントな方法はありますか?

分類Dev

現在のコードよりも、複数の非表示のdivでjquery .slideToggleを使用するためのよりエレガントでシンプルな方法はありますか?

分類Dev

クラス内のすべてのメソッドをC#の特定のコードブロックで開始するエレガントな方法はありますか?

分類Dev

Morphiaクエリを再利用するための良いパターンはありますか?

分類Dev

これらの条件を書くためのよりエレガントな方法はありますか?

分類Dev

エラーを克服するためのよりエレガントな方法は何ですか:オブジェクト指定子を期待しています。JXA経由でメッセージ経由でSMSを送信する場合、引数にはオブジェクト指定子がありません

分類Dev

ReactJS コンポーネントを再利用するためのより良い方法は何ですか?

分類Dev

クラス内のすべてのメソッドを特定のコードブロックで開始するエレガントな方法はありますか?

分類Dev

Swiftでこの遅延読み込みパターンを作成するためのよりエレガントな方法はありますか?

分類Dev

このLCM関数を書くためのよりクリーンでエレガントなHaskellの方法はありますか?

分類Dev

これを書くためのより短く/エレガント/効率的な方法はありますか?

Related 関連記事

  1. 1

    イベント/トリガーを定期的にチェックするためのよりエレガントな方法はありますか?

  2. 2

    コードを読みやすくするためにJavaブール値の名前を変更するエレガントな方法はありますか?

  3. 3

    プロットMatplotlibを再利用するためのより良い方法はありますか?

  4. 4

    フォームのデフォルト値をチェックするためのよりエレガントな方法はありますか?

  5. 5

    コレクションをグループ化するための単一行削減のこのハッキーな実装を回避するためのよりエレガントな方法はありますか?

  6. 6

    CUDAでmallocおよびfreeするためのより良い/よりクリーンな/よりエレガントな方法はありますか?

  7. 7

    このビルダーをコーディングするためのよりエレガントな方法はありますか?

  8. 8

    部分文字列を作成するためのよりエレガントな方法はありますか?

  9. 9

    HTMLを再利用可能なブロックにする方法はありますか?

  10. 10

    Pythonで辞書ループ例外を処理するためのより良いまたはよりエレガントな方法はありますか?

  11. 11

    qtでキーボードショートカットの大規模なコレクションを適切に管理するためのエレガントな方法はありますか?

  12. 12

    このコードよりもJavaでXMLドキュメントを文字列に変換するよりエレガントな方法はありますか?

  13. 13

    改造のためにビルダーコードを再利用する方法はありますか

  14. 14

    マップからリストを埋めるためのよりエレガントなソリューションはありますか?

  15. 15

    React Nativeでさまざまなコンポーネントを条件付きでレンダリングするためのより良いまたはよりエレガントな方法はありますか?

  16. 16

    これを書くためのよりコンパクトでエレガントな方法はありますか?

  17. 17

    実行時にジョブ番号にアクセスするためのよりエレガントな方法はありますか?

  18. 18

    ブロックをその左側にあるブロックに浮かせるエレガントな方法はありますか?

  19. 19

    ブロックをその左側にあるブロックに浮かせるエレガントな方法はありますか?

  20. 20

    現在のコードよりも、複数の非表示のdivでjquery .slideToggleを使用するためのよりエレガントでシンプルな方法はありますか?

  21. 21

    クラス内のすべてのメソッドをC#の特定のコードブロックで開始するエレガントな方法はありますか?

  22. 22

    Morphiaクエリを再利用するための良いパターンはありますか?

  23. 23

    これらの条件を書くためのよりエレガントな方法はありますか?

  24. 24

    エラーを克服するためのよりエレガントな方法は何ですか:オブジェクト指定子を期待しています。JXA経由でメッセージ経由でSMSを送信する場合、引数にはオブジェクト指定子がありません

  25. 25

    ReactJS コンポーネントを再利用するためのより良い方法は何ですか?

  26. 26

    クラス内のすべてのメソッドを特定のコードブロックで開始するエレガントな方法はありますか?

  27. 27

    Swiftでこの遅延読み込みパターンを作成するためのよりエレガントな方法はありますか?

  28. 28

    このLCM関数を書くためのよりクリーンでエレガントなHaskellの方法はありますか?

  29. 29

    これを書くためのより短く/エレガント/効率的な方法はありますか?

ホットタグ

アーカイブ