TO_Char Oracle 中的数字格式模型
TO_Char number format model in Oracle
我不完全理解如何使用 to_char 函数将数字转换为具有适当格式模型的字符串。
实际号码是这样的格式:
- 使用逗号作为小数点分隔符
- 总是 5 个小数
- 整数最多为6(可能无限大,但目前不会超过6)
- 数字可正可负
- 数字可以以 0 开头
我尝试使用 to_char 但我无法获得适合所有条件的结果
输出应该如何的一些例子是
0,00235
或 156,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 设置的覆盖——如果您的语言环境使用逗号表示小数点,则可能没有必要,但这是一种可以在数据库中强制执行此行为的方法,比如,北美设置。
我不完全理解如何使用 to_char 函数将数字转换为具有适当格式模型的字符串。
实际号码是这样的格式:
- 使用逗号作为小数点分隔符
- 总是 5 个小数
- 整数最多为6(可能无限大,但目前不会超过6)
- 数字可正可负
- 数字可以以 0 开头
我尝试使用 to_char 但我无法获得适合所有条件的结果
输出应该如何的一些例子是
0,00235
或 156,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 设置的覆盖——如果您的语言环境使用逗号表示小数点,则可能没有必要,但这是一种可以在数据库中强制执行此行为的方法,比如,北美设置。