TO_Char Oracle 中的数字格式模型

TO_Char number format model in Oracle

我不完全理解如何使用 to_char 函数将数字转换为具有适当格式模型的字符串。

实际号码是这样的格式:

我尝试使用 to_char 但我无法获得适合所有条件的结果

输出应该如何的一些例子是 0,00235156,45623-0,0235-156,45623

无耻地从@Vadzim this post 那里偷来的。

您应该能够通过使用此模式获得您正在寻找的格式:

rtrim(to_char(num, 'FM999999999999990.99'), '.')

https://rextester.com/QRSD48676

SELECT rtrim(to_char('0,00235', 'FM999999999999990.99999'), '.') FROM DUAL\
SELECT rtrim(to_char('156,45623', 'FM999999999999990.99999'), '.') FROM DUAL\  
SELECT rtrim(to_char('-0,0235', 'FM999999999999990.99999'), '.') FROM DUAL\
SELECT rtrim(to_char('-156,45623', 'FM999999999999990.99999'), '.') FROM DUAL\

结果:

0.00235
156.45623
-0.0235
-156.45623

请记住,您正在将数字转换为字符串。该数字没有任何“,”或“。”的含义。或任何东西——它是一个数字。

诀窍是让 TO_CHAR 函数将内部数字转换为您想要的字符串表示形式。 有几个问题需要担心:正确获取小数点(十进制)并处理填充。

这是一个工作示例:

SELECT to_char(0.00235,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;

0,00235

SELECT to_char(156.45823,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;

156,45823

SELECT to_char(-0.0235,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;

-0,0235

SELECT to_char(-156.45623,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;

-156,45623

SELECT to_char(123456789.45623,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;

123456789,45623

口罩相关部分:

FM用于 trim Oracle 通常用来填充数字的前导和尾随空格。

D 是小数点,取决于您的 NLS 设置。

NLS_NUMERIC_CHARACTERS ... 是对本地 NLS 设置的覆盖——如果您的语言环境使用逗号表示小数点,则可能没有必要,但这是一种可以在数据库中强制执行此行为的方法,比如,北美设置。