sql >> データベース >  >> RDS >> Oracle

OracleのROUND(date)関数

    Oracleでは、ROUND(date) 関数は、指定された日付単位に丸められた日付を返します。

    デフォルトでは、日付は最も近い日に丸められますが、使用する代替単位を指定するオプションの引数を指定できます。

    OracleにはROUND(number)もあります 数値に使用される構文。この記事は、ROUND(date)に関するものです。 日付で使用される構文。

    構文

    構文は次のようになります:

     ROUND(date [, fmt ]) 

    date DATEに解決する必要があります 値、および fmt dateを丸める単位を指定するオプションのフォーマットモデルです。 に。 フォーマットモデルは、TRUNC(date)でサポートされているフォーマットモデルのいずれかです。 およびROUND(date) 機能。

    次に例を示します:

     SELECT 
        ROUND(TO_DATE('2030-12-31 12:30:45', 'YYYY-MM-DD HH24:MI:SS'))
    FROM DUAL; 

    結果:

     01-JAN-31 

    この場合、時間部分は正午を過ぎており、日付は翌日(たまたま翌月と翌年)に丸められました。

    丸めるデフォルトの単位であり、別の単位を明示的に指定しなかったため、その日に丸められました。

    時間の部分を正午より前に減らすと、次のようになります。

     SELECT 
        ROUND(TO_DATE('2030-12-31 11:59:59', 'YYYY-MM-DD HH24:MI:SS'))
    FROM DUAL; 

    結果:

     31-DEC-30 

    今回は同じ日に丸められます。

    返される日付形式は、NLS_DATE_FORMATの値によって異なることに注意してください。 パラメータ(興味がある場合は、セッションの日付値をフォーマットする方法は次のとおりです)。

    指定された日付単位に丸める

    日付を丸めるために別の日付単位を指定する例を次に示します。

     SELECT 
        ROUND(DATE '2030-12-31', 'MONTH')
    FROM DUAL; 

    結果:

     01-JAN-31 

    ここに再びありますが、他のさまざまな日付があります:

     SELECT 
        ROUND(DATE '2030-03-10', 'MONTH') AS "2030-03-10",
        ROUND(DATE '2030-03-18', 'MONTH') AS "2030-03-18",
        ROUND(DATE '2030-08-10', 'MONTH') AS "2030-08-10",
        ROUND(DATE '2030-08-10', 'MONTH') AS "2030-08-10"
    FROM DUAL; 

    結果:

     2030-03-10 2030-03-18 2030-08-10 2030-08-10 _____________ _____________ _____________ _____________ 01-MAR-30 01-APR-30 01-AUG-30 01-AUG-30 > 

    そして、ここでは同じ日付ですが、さまざまなフォーマット要素があります:

     SELECT 
        ROUND(DATE '2030-10-31', 'DAY') AS "Day",
        ROUND(DATE '2030-10-31', 'WW') AS "Week of year",
        ROUND(DATE '2030-10-31', 'MONTH') AS "Month",
        ROUND(DATE '2030-10-31', 'YEAR') AS "Year"
    FROM DUAL; 

    結果:

    曜日週月月年_______________________________________ ____________ 03-NOV-30 29-OCT-30 01-NOV-30 01-JAN-31 

    これは、指定された日付単位に応じて、どの程度の変動があるかを示しています。

    マイナスの日付

    それらを負の日付に変換すると、次のようになります。

     SELECT 
        ROUND(DATE '-2030-10-31', 'DAY') AS "Day",
        ROUND(DATE '-2030-10-31', 'WW') AS "Week of year",
        ROUND(DATE '-2030-10-31', 'MONTH') AS "Month",
        ROUND(DATE '-2030-10-31', 'YEAR') AS "Year"
    FROM DUAL; 

    結果:

    曜日週月月年_______________________________________ ____________ 28-OCT-30 29-OCT-30 01-NOV-30 01-JAN-29 

    明らかに、日付が変わると結果も変わります。

    日付以外の引数の丸め

    DATEに変換できない日付以外の引数を丸めようとするとどうなりますか。 データ型:

     SELECT ROUND('Bruce')
    FROM DUAL; 

    結果:

    コマンドの1行目から始まるエラー-SELECTROUND('Bruce')FROM DUALError report -ORA-01722:invalid number 

    ただし、数値を丸めることはできます。この関数には、数値を丸めることができる数値バージョンがあります。

    ヌル値

    nullを丸めようとしています nullを返します 、およびnullで日付を丸めようとしています また、nullになります :

     SET NULL 'null';
    
    SELECT 
        ROUND(null),
        ROUND(null, 'MONTH'),    
        ROUND(DATE '2030-12-20', null)
    FROM DUAL; 

    結果:

     ROUND(NULL)ROUND(NULL、'MONTH')ROUND(DATE'2030-12-20'、NULL)______________ ______________________ _______________________________ null null null 

    デフォルトでは、SQLclおよびSQL * Plusは、nullの場合は常に空白を返します。 SQL SELECTの結果として発生します 声明。

    ただし、SET NULLは使用できます 返される別の文字列を指定します。ここでは、文字列nullを指定しました 返却する必要があります。

    引数の数が正しくありません

    ROUND()を呼び出す 引数を渡さないとエラーが返されます:

     SELECT ROUND()
    FROM DUAL; 

    結果:

    コマンドラインの行:1から始まるエラー-SELECT ROUND()FROM DUALコマンドラインのエラー:1列:8エラーレポート-SQLエラー:ORA-00938:function00938の引数が不足しています。 00000-「関数の引数が足りません」*原因:*アクション:

    また、間違った数の引数を渡すと、エラーが発生します:

     SELECT ROUND(DATE '2030-12-20', 'day', 'month')
    FROM DUAL; 

    結果:

    コマンドラインの1行目から始まるエラー-SELECTROUND(DATE '2030-12-20'、'day'、'month')FROM DUALError at Command Line:1 Column:40Error report -SQL Error:ORA-00939 :function00939の引数が多すぎます。 00000-「関数の引数が多すぎます」*原因:*アクション:

    1. MySQLに最適なDBaaSソリューション

    2. SQLINSERTステートメントにPythondictを使用する

    3. MySQLで英数字を含む行を返す2つの方法

    4. MySQL Workbenchとは何ですか?