我不完全了解如何使用to_char函数将数字转换为具有适当格式模型的字符串。
实际数字具有以下格式:
我尝试使用to_char,但无法获得在所有条件下均可使用的结果
关于输出应如何的一些示例是
0,00235
或156,45623
或-0,0235
或-156,45623
答案 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