我正在使用oracle 10g express。

我有一个名为Artists_i_hate的表,为了简化说明,我进行了简化。

ID | Name       | Opinion
-----------------------------
11 | jamesblunt | i hate him

我发表声明
SELECT * FROM artists_i_hate WHERE to_char(ID)=REPLACE(to_char(1.1), '.');

为什么我找不到“找不到数据”,所以在文档的任何地方都找不到解释。

顺便说一句,我知道以下作品:
SELECT * FROM artists_i_hate WHERE to_char(ID)=REGEXP_REPLACE(to_char(1.1), '[^0-9]');

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

编辑:

正在对原始环境进行测试,已读取了前2个响应

最佳答案

它可能取决于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

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

PS。
如果这是问题所在,则一种解决方法是
select to_char(1.25,'999.99','NLS_NUMERIC_CHARACTERS=.,') FROM DUAL

关于sql - Oracle 10g中的REPLACE无法按预期工作,有人可以解释吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4975395/

10-17 01:50