Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql oracle在to_number函数中没有给出错误的格式字符串吗?_Sql_Oracle - Fatal编程技术网

Sql oracle在to_number函数中没有给出错误的格式字符串吗?

Sql oracle在to_number函数中没有给出错误的格式字符串吗?,sql,oracle,Sql,Oracle,在oracle sql中 TO_NUMBER('1000.98','9999.99')给出的答案为1000.98//第1行 TO_NUMBER('1000.98','9999.99')也给出了答案1000.98//第2行 为什么第2行不给出错误,尽管格式字符串与给定字符串不匹配?(格式字符串没有逗号)文档有点混乱: TO_NUMBER将expr转换为数字数据类型的值。 expr可以是二进制双精度值,也可以是CHAR、VARCHAR2、NCHAR或NVARCHAR2数据类型的值,包含可选格式模型f

在oracle sql中

TO_NUMBER('1000.98','9999.99')
给出的答案为
1000.98
//第1行

TO_NUMBER('1000.98','9999.99')
也给出了答案
1000.98
//第2行

为什么第2行不给出错误,尽管格式字符串与给定字符串不匹配?(格式字符串没有逗号)

文档有点混乱:

TO_NUMBER
将expr转换为数字数据类型的值。 expr可以是二进制双精度值,也可以是CHAR、VARCHAR2、NCHAR或NVARCHAR2数据类型的值,包含可选格式模型fmt指定格式的数字

尽管如此
Oracle
在进行转换时只关心源字符串中的十进制分隔符,因此其忽略数千个组标记,以此类推此行为似乎没有在任何地方记录

分隔符标记由设置

NLS\u NUMERIC\u CHARACTERS
选项指定十进制标记和 会话的千组标记

最安全的转换考虑:


我的国家禁止使用Oracle文档,因此我无法访问它
但是在非官方教程中,很明显,如果在没有第三个参数(NLS_参数)的情况下使用
TO_NUMBER
函数,它将忽略所有非数字字符,并向您显示数字,仅识别点(.)作为小数点的表示法
如果您想让它识别数字中使用的所有其他可能的格式字符(如
表示千位分隔符),那么还必须使用第三个参数
正确的格式为:

TO_NUMBER('1,000.98', '9999.99', 'nls_numeric_characters=''.,''')
类似的问题和良好的答案如下:


希望有帮助。

默认格式是什么?我要求becoz告诉您,您的号码('1,0,0,00.98','999999.99')也在工作。尽管给出了这么多的逗号,格式字符串没有逗号,但它仍然接受该值,您能解释一下原因吗?但如果我没有提到格式字符串,它如何能够识别逗号并给出错误?e、 g如果我写到_NUMBER('1000.98')则给出错误。此外,如果我在格式字符串中的其他位置给出逗号,例如,到_NUMBER('1000.98','999,9.99'),则给出错误。只要我不给逗号,它就可以正常工作。即使在写了第三个参数之后,它也可以正常工作way@A_J检查这个问题,并让我知道它是否有帮助。我认为选定的答案会解决这个问题。[我从链接中了解到:逗号是默认的NLS_数字_字符,这就是为什么即使在格式字符串中没有提及它也可以工作的原因。但是我不确定我是否理解正确。如果您能解释一下,这将非常有帮助。
TO_NUMBER('1,000.98', '9999.99', 'nls_numeric_characters=''.,''')