Oracle 11g データベースに特定の文字数 (4 としましょう) を保存しようとしています。データを言うと、私の番号には 0100 0101 などの先行ゼロがあります。オラクルが先行ゼロを切り捨てるのはなぜですか。これを回避することは可能ですか?先頭のゼロを保存してほしいです。助けてください。
ありがとう!
先頭にゼロが付いた数値を表示する場合は、次を使用します。
to_char(my_number,'fm0000')
数字を先行ゼロで格納する必要がある場合は、 varchar2として格納します。これは、数値ではなく数字のみで構成される文字列があるためです。
上記の答えが最適ですが、先行ゼロとTO_CHAR
先行スペースが追加されるため、微調整が必要です。先行スペースは、負の符号がある場合のプレースホルダーです。TO_CHAR(number, '0000')
SELECT '[' || TO_CHAR(123, '0000') || ']' "Format" FROM DUAL;
Format
-------
[ 0123] <-- note the leading space
スペースを取り除くには、LTRIMを使用するか、フォーマット文字列でFM修飾子を使用します。
SELECT '[' || TO_CHAR(123, 'FM0000') || ']' "Format" FROM DUAL;
Format
-------
[0123] <-- no more leading space
先行ゼロを格納する場合は、数値char()
を固定長値の場合はaとして、可変長値の場合はvarchar()
(またはvarchar2()
)として格納します。
数値は、先行ゼロの概念がない2進形式で格納されます。
8桁を取得する簡単なトリック:
substr(your_number + power(10,8), 2)