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
の場合は常に空白を返します。 SQLSELECT
の結果として発生します 声明。ただし、
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-「関数の引数が多すぎます」*原因:*アクション: