Oracle中的TO_Char数字格式模型

时间:2019-07-16 19:05:40

标签: sql oracle to-char

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

实际数字具有以下格式:

  • 使用逗号作为小数点分隔符
  • 总是5个十进制数字
  • 整数最多可以有6个(可能是无限个,但现在它们从未超过6个)
  • 数字可以是正数或负数
  • 数字可以以0开头

我尝试使用to_char,但无法获得在所有条件下均可使用的结果

关于输出应如何的一些示例是 0,00235156,45623-0,0235-156,45623

2 个答案:

答案 0 :(得分:1)

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

技巧是获得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用于修剪Oracle通常用来填充数字的前导和尾随空格。

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

NLS_NUMERIC_CHARACTERS ...是对本地NLS设置的替代-如果您的语言环境使用逗号作为小数,这可能不是必需的,但是这是您可以通过以下方式在数据库中强制执行此操作:北美设置。

答案 1 :(得分:0)

从@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