Oracle 10g中的REPLACE没有按照我的预期工作,任何人都可以解释一下吗?

rog*_*oom 2 sql string oracle oracle10g ora-01403

我正在使用oracle 10g express.

我有一个名为artists_i_hate的表,我已经简化了以更清楚地说明问题

ID | Name       | Opinion
-----------------------------
11 | jamesblunt | i hate him 
Run Code Online (Sandbox Code Playgroud)

我发表声明

SELECT * FROM artists_i_hate WHERE to_char(ID)=REPLACE(to_char(1.1), '.');
Run Code Online (Sandbox Code Playgroud)

为什么我"找不到数据"我在文档的任何地方都找不到解释.

顺便说一下我知道以下工作:

SELECT * FROM artists_i_hate WHERE to_char(ID)=REGEXP_REPLACE(to_char(1.1), '[^0-9]');
Run Code Online (Sandbox Code Playgroud)

所以我认为其他声明不起作用,因为它不喜欢替换某些符号.

编辑:

正在阅读前2个响应的原始环境测试

Gar*_*ers 5

它可能取决于NLS设置,在某些语言中.不是小数分隔符所以to_char(1.1)不会给'1.1'

SQL> alter session set nls_numeric_characters = ',.';

Session altered.

SQL> select to_char(12.34) from dual;

TO_CH
-----
12,34
Run Code Online (Sandbox Code Playgroud)

在这种情况下,REPLACE不会更改任何内容,因此ID不匹配.

PS.如果这是问题,那么一个修复就是

select to_char(1.25,'999.99','NLS_NUMERIC_CHARACTERS=.,') FROM DUAL
Run Code Online (Sandbox Code Playgroud)