【问题标题】:Oracle INSTR backward in Oracle SQLOracle INSTR 在 Oracle SQL 中落后
【发布时间】:2015-01-22 14:21:20
【问题描述】:

我正在尝试在 oracle SQL 中找到一种方法,将第一个“/”之后的所有文本从右边移到第四个“/”。我需要在一个 SQL 语句中执行此操作..

table name: access_log
col name: download
value: Download file:/webdocs/data/groupXXX/case/03_28_54_9_0000011856.pdf

我正在尝试结束

case

然后数一数有多少匹配?这个可以吗?

【问题讨论】:

  • 给定REVERSE反转一个字符串,也许你可以反转,从左边匹配,反转?
  • 实际上,它必须是可能的(可能是多个)REGEXP_SUBSTR?
  • 对不起,我不明白你要准确计算什么

标签: sql oracle substring


【解决方案1】:

简单的SUBSTR 方法适用于 Oracle 10g+

select TRIM(BOTH '/' FROM 
          substr(
                  download,
                  INSTR(download,'/',1,4),
                  INSTR(download,'/',1,5)-INSTR(download,'/',1,4)
                 )
           )
FROM ACCESS_LOG;

计数可能是,

SELECT
COUNT(
         CASE WHEN TRIM(BOTH '/' FROM 
                        substr(
                                download,
                                INSTR(download,'/',1,4),
                                INSTR(download,'/',1,5)-INSTR(download,'/',1,4)
                               )
                         ) = 'case'
         THEN
             1
         END
       ) COUNT_MATCHED
FROM 
     ACCESS_LOG;

【讨论】:

  • 我需要这个来自数据库而不是硬编码的值
  • 嗯?我不明白
【解决方案2】:
select regexp_replace('Download file:/webdocs/data/groupXXX/case/03_28_54_9_0000011856.pdf', 
                      '.*/([^/]+)/[^/]*$', '\1') from dual;

【讨论】:

  • 我不需要来自硬编码值我需要来自数据库值
  • @JMS 也许您可以提供更多示例记录来测试所提供的任何一种方法。
  • 我确实找到了该值并计算了它在数据库中的次数
猜你喜欢
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
  • 2021-06-17
  • 2019-10-12
  • 1970-01-01
  • 2015-05-10
相关资源
最近更新 更多