【问题标题】:Oracle: Query returns \u0001 in application, works fine in SQL DeveloperOracle:查询在应用程序中返回 \u0001,在 SQL Developer 中工作正常
【发布时间】:2015-07-27 14:41:47
【问题描述】:

我在 SELECT 查询中有以下列:

SELECT INITCAP(RTRIM(REGEXP_replace(name, '(^.+) [0-9\.]{1,}%.*', '\1'))) AS name,  

这会删除任何百分比以及名称字段中随后出现的内容。例如:

'MY_NAME 10% Test' 会给'My_name'

有些行有这个 % 条目,有些则没有。对于那些没有它的人,它只会返回带有 initcaps 的原始值:MY_Name -> My_name。

在 SQL Developer 中运行查询时,这非常有效。但是,当我在实际应用程序(php5、oci)中运行它时,所有带有 % 符号的值都作为 unicode 代码点 \u0001 返回。

编码是AL32UTF8,数据库和连接都是。

是什么导致了这个问题?我该如何解决?

编辑:

问题肯定来自 regexp_replace 函数,就像

REGEXP_replace(name, '(^.+) [0-9\.]{1,}%.*', '\1'))) AS name

导致同样的问题。

【问题讨论】:

    标签: regex oracle replace character-encoding


    【解决方案1】:

    在应用程序中,SQL 位于字符串中,因此正则表达式中的所有反斜杠 \ 都必须转义,例如。双 bachslash \\。例如:

    SELECT INITCAP(RTRIM(REGEXP_replace(name, '(^.+) [0-9\\.]{1,}%.*', '\\1'))) AS name, 
    

    【讨论】:

      猜你喜欢
      • 2013-05-11
      • 2017-02-18
      • 2012-06-14
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      相关资源
      最近更新 更多