【问题标题】:Replace a Space with Special characters in a SELECT用 SELECT 中的特殊字符替换空格
【发布时间】:2014-11-23 10:45:58
【问题描述】:

我想在 OBIEE 中搜索时用特殊字符替换空格

示例:当我搜索“T MOBILE”时,我会找到“T-MOBILE”和“T_MOBILE”等。

这是我的 Select 语句:

SELECT "- Customer Install At"."Cust Number" saw_0, 
       "- Customer Install At"."Cust Name" saw_1, 
       "- Customer CRI Current Install At"."Global Duns  Number" saw_2, 
       "- Customer CRI Current Install At"."Global Duns Name" saw_3
FROM "GS Install Base"
ORDER BY saw_0, saw_1, saw_2, saw_3

我尝试在 WHERE 中使用 REGEXP_LIKE,但它给了我一个错误 "获取钻取信息时出错:"

谁能帮我解决这个问题?

【问题讨论】:

  • 您的声明无效。您的 from 子句仅包含一个名为 "GS Install Base" 的表,但选择列表使用表 "- Customer Install At""- Customer CRI Current Install At"
  • 澄清您尝试应用此过滤器的位置可能很有用。仪表板提示?过滤分析?了解您如何“尝试在 WHERE 中使用 REGEXP_LIKE”也很有用。

标签: sql oracle obiee


【解决方案1】:

我不知道你需要这个多通用。对于您的示例,您将使用 LIKE 运算符。

WHERE FIELDNAME LIKE 'T_MOBILE'

通配符下划线“_”将查找在该位置匹配的任何字符。您可以使用的另一个通配符是“%”,它将匹配一组任意长度的字符。

【讨论】:

    【解决方案2】:

    如果您想做一些比 koriander 的答案更复杂的事情,那么以下应该可以工作。

    您不能直接使用数据库函数(例如 regexp_like),只能使用 OBI 函数。所以需要使用 OBI 函数 EVALUATE 将 regexp_like 函数传回数据库。

    (有大量关于 EVALUATE 函数的文档,来自 Oracle 和其他人。)

    在您尝试过滤的列上,您首先需要将过滤器转换为 SQL,将整个过滤器替换为以下内容:

    evaluate('REGEXP_LIKE(%1, ''^T.MOBILE$'', ''i'')', MyTable.MyColumn)
    

    【讨论】:

    • 非常感谢,这就是我发现的我还发现管理员可能会阻止我们的某些功能,所以我应该请求打开它!
    • @yehia2amer 说得好,需要在配置中启用评估功能。
    【解决方案3】:

    函数 regexp_like 也应该在这里工作:

    SELECT *
    FROM "GS Install Base"
    WHERE REGEXP_LIKE (company_name, '^T.MOBILE$');
    

    ^ - 匹配字符串的开头

    $ - 匹配它的结尾

    。 - 匹配除 null 以外的所有字符

    【讨论】:

      猜你喜欢
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2020-06-27
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      相关资源
      最近更新 更多