質問するログイン新規登録
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

解決済

1回答

425閲覧

平均年齢の表示桁数を統一したい

bbxb

総合スコア1

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

0グッド

0クリップ

投稿2023/11/10 05:56

0

0

実現したいこと

平均年齢の項目を任意の小数点以下の桁数を表示しする。
不足している場合は0を入れる
(例)
49.25に対して桁数を3とした場合は「49.250」としたい

前提

男女別、全社員の平均年齢、および人数を計算して抽出するSQLを作成しております。
平均年齢の表示桁数を統一するのが今回の目的です

発生している問題・エラーメッセージ

上記例でしめしたように不足分には「0」が入ってほしいのだがやり方がわからない

該当のソースコード

(実行SQL)
SELECT
CHK_GENDER(性別) AS 性別,
TRUNC(AVG(UPDATE_AGE(誕生日)), 3) AS 平均年齢,
COUNT() AS 人数
FROM
社員マスタ
GROUP BY
CHK_GENDER(性別)
UNION ALL
SELECT
'全社' AS 性別,
TRUNC(AVG(UPDATE_AGE(誕生日)), 3) AS 平均年齢,
COUNT(
) AS 人数
FROM
社員マスタ

(作成してみたFunction)
CREATE OR REPLACE FUNCTION YAMAGATA.AVG_AGE (age in NUMBER, effect_number in NUMBER )
RETURN NUMBER-- 戻り値のデータ型
IS
total_number NUMBER;
BEGIN
-- aを小数点以下b桁までフォーマット
total_number := TO_NUMBER(TRUNC(age, effect_number), 'FM99999999999990.' || RPAD('0', effect_number, '0'));
RETURN total_number;
END;
/

試したこと

表示しているソースコードにはTRUNC関数を使用して単純に切り捨てているがここにFunctionを利用できないかも試してみた
引数に平均年齢(変数a)、表示したい桁数(変数b)として任意の桁数を表示してその値を返すというものです。

補足情報(FW/ツールのバージョンなど)

Object Browser for Oracle, ORACLE11

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

TO_CHAR関数を利用されるとよいと思います。書式については以下のURLも参考にしてください。

https://docs.oracle.com/cd/E16338_01/server.112/b56299/sql_elements004.htm

SQL

1SELECT TO_CHAR(49 , '99.999') FROM DUAL; -- 49.000 2SELECT TO_CHAR(49.1 , '99.999') FROM DUAL; -- 49.100 3SELECT TO_CHAR(49.12 , '99.999') FROM DUAL; -- 49.120 4SELECT TO_CHAR(49.123 , '99.999') FROM DUAL; -- 49.123 5SELECT TO_CHAR(49.1234, '99.999') FROM DUAL; -- 49.123

投稿2023/11/10 06:35

neko_the_shadow

総合スコア2395

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bbxb

2023/11/10 06:52

TO_NUMBERをTO_CHARに変えてファンクションの戻りの型をVARCHAR2にしたら解決いたしました。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問