我希望在最后的'/'之前和''之前的oracle表中获取子字符串。从图像表中的最后一个

时间:2015-04-01 05:09:40

标签: oracle plsql oracle11g plsqldeveloper

我想从最后'/'和最后''之间的列中的字符串中获取子字符串。

以下是IMAGE_PATH列名称的示例日期:

 sph/images/30_Fairhall_Court.jpeg
 sph/images/9_Pennethorne_House.jpeg
 rbkc/images/TAVISTOCK_CRESCENT.jpeg
 haringey/images/399932thumb.jpg
 urbanchoice/images/18190862.jpg
 wandle/images/f13c10d2-2692-457d-a208-8bb9e10b27dc.png
 housingmoves/images/No14_Asterid Heights_DS37620.jpg
 wandle/images/f13c10d2-2692-457d-a208-8bb9e10b27dc.png 

所以所需的输出就像

 30_Fairhall_Court
 9_Pennethorne_House
 TAVISTOCK_CRESCENT
 399932thumb
 18190862
 f13c10d2-2692-457d-a208-8bb9e10b27dc
 No14_Asterid Heights_DS37620
 f13c10d2-2692-457d-a208-8bb9e10b27dc

请建议如何获取。我需要使用此值更新表中的另一个空白列。该表约有10个缺乏记录。

2 个答案:

答案 0 :(得分:0)

此正则表达式适用于您提供的示例数据:

select regexp_substr(image_path
            , '(/)([a-z0-9_ \-]+)(\.)([a-z]+)$'
            , 1
            , 1
            , 'i'
            , 2) 
from t23
/

我们必须在pattern之后包含所有可选参数,以便我们可以使用subexpr参数来仅选择文件名元素。 Find out more


就更新而言,一百万行表并不大。鉴于您必须更新所有行,您可以做很多事情来调整它。只需发出UPDATE语句并让它翻录。


  

"它无效"

嗯,这里a SQL Fiddle which proves it does work。你可能引入了一个拼写错误。

  

"正则表达式看起来不必要复杂。为什么不简单"

也许这太复杂了。但是,如果IMAGE_PATH中有多个点,则简化版本不会产生正确的结果。如果这种情况永远不会发生,那么您的解决方案就可以正常运行。

答案 1 :(得分:0)

可能的解决方案之一是使用带有负第三参数的函数substr()和instr()

select image_path, 
    substr(image_path, 
           instr(image_path, '/', -1) + 1, 
           instr(image_path, '.', -1)-instr(image_path, '/', -1) - 1) img
  from test

SQL Fiddle

结果:

IMAGE_PATH                                                IMG
--------------------------------------------------------  -------------------------------------
sph/images/30_Fairhall_Court.jpeg                         30_Fairhall_Court
sph/images/9_Pennethorne_House.jpeg                       9_Pennethorne_House
rbkc/images/TAVISTOCK_CRESCENT.jpeg                       TAVISTOCK_CRESCENT
haringey/images/399932thumb.jpg                           399932thumb
urbanchoice/images/18190862.jpg                           18190862
wandle/images/f13c10d2-2692-457d-a208-8bb9e10b27dc.png    f13c10d2-2692-457d-a208-8bb9e10b27dc
housingmoves/images/No14_Asterid Heights_DS37620.jpg      No14_Asterid Heights_DS37620
wandle/ima.ges/f13c10d2-2692-457d-a208-8bb9e10b27dc.png   f13c10d2-2692-457d-a208-8bb9e10b27dc