sql - Oracle 10g 中的 REPLACE 没有按我的预期工作,有人能解释一下吗?

标签 sql oracle string oracle10g ora-01403

我使用的是 Oracle 10g Express。

我有一个名为 arts_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/

相关文章:

sql - 将 mysql 数据库转换为 sqlite 数据库的最佳方法是什么?

java - MyBatis 中的映射组合

c# - 如何使用 string.Endswith 来测试多个结尾?

mysql - 如何提高查询的性能?

asp.net - ODP.net 连接池 : ClientID, 客户端标识符从第一个登录的用户开始不会改变

sql - 是否可以使用sql实现DFS(深度优先搜索)?

database - Oracle Database 12C 关机后无法启动

scala - Scala 和 Clojure 中的简单字符串模板替换

Java String-如何在android中获取包名称的一部分?

sql - 您能否在 SQL Server 表中定义一个新列,为新行自动生成唯一标识符?