2015-03-13 23 views
1

IMAGE_PATH(它的列名)我有柱IMAGE_PATH TableA的,我需要字符串存續

sph/images///////30_Fairhall_Court.jpeg 
    sph/images///8_Furnival_Court.jpeg 
    sph/images/9_Pennethorne_House.jpeg 
    rbkc/images/TAVISTOCK_CRESCENT.jpeg 
    haringey///images/399932thumb.jpg 
    urbanchoice/images//18190862.jpg 
    westminster/images//7_Glarus_Court.jpeg 

我想獲取來自IMAGE_PATH列串作爲

30_Fairhall_Court 
8_Furnival_Court 
9_Pennethorne_House 
TAVISTOCK_CRESCENT 
399932thumb 
18190862 
7_Glarus_Court 

意味着我需要在尾部之間的子字符串呃上次'/'和之前'。' 請給我提供的解決方案是如何將其固定

+0

一個'單slash'或'double'或'tripple'你的數據有他們三個 – 2015-03-13 11:23:59

+0

它可能有很多次,但我需要的「/」和前最後一次出現之間產生點(。)。 – 2015-03-13 11:32:28

+0

@Ameya Deshpande: - 給出無效的LEFT標識符。 – 2015-03-13 11:34:23

回答

4

試試這個簡單的方法(使用SUBSTRINSTR):

SELECT SUBSTR(image_path, INSTR(image_path, '/', -1)+1) "Image name" 
FROM IMAGES; 

編輯:,如果你不想讓extension s個文件的與.使用:

SELECT SUBSTR(image_path, INSTR(image_path, '/', -1)+1, 
       (INSTR(image_path, '.', -1))-INSTR(image_path, '/', -1)-1) "Image name" 
FROM IMAGES; 

OUTPUT:

30_Fairhall_Court 
8_Furnival_Court 
9_Pennethorne_House 
TAVISTOCK_CRESCENT 
399932thumb 
18190862 
7_Glarus_Court 
2

您可以嘗試像下面這樣的東西:

WITH d1 AS (
    SELECT 'sph/images///////30_Fairhall_Court.jpeg' AS image_path FROM dual 
    UNION ALL 
    SELECT 'sph/images///8_Furnival_Court.jpeg' AS image_path FROM dual 
    UNION ALL 
    SELECT 'sph/images/9_Pennethorne_House.jpeg' AS image_path FROM dual 
    UNION ALL 
    SELECT 'rbkc/images/TAVISTOCK_CRESCENT.jpeg' AS image_path FROM dual 
    UNION ALL 
    SELECT 'haringey///images/399932thumb.jpg' AS image_path FROM dual 
    UNION ALL 
    SELECT 'urbanchoice/images//18190862.jpg' AS image_path FROM dual 
    UNION ALL 
    SELECT 'westminster/images//7_Glarus_Court.jpeg' AS image_path FROM dual 
) 
SELECT TRIM(TRAILING '.' FROM REGEXP_SUBSTR(image_path, '[^/]+\.')) 
    FROM d1; 

以上並假設有最終/之前沒有.字符。一個更好的解決方案可能是:

WITH d1 AS (
    SELECT 'sph/images///////30_Fairhall_Court.jpeg' AS image_path FROM dual 
    UNION ALL 
    SELECT 'sph/images///8_Furnival_Court.jpeg' AS image_path FROM dual 
    UNION ALL 
    SELECT 'sph/images/9_Pennethorne_House.jpeg' AS image_path FROM dual 
    UNION ALL 
    SELECT 'rbkc/images/TAVISTOCK_CRESCENT.jpeg' AS image_path FROM dual 
    UNION ALL 
    SELECT 'haringey///images/399932thumb.jpg' AS image_path FROM dual 
    UNION ALL 
    SELECT 'urbanchoice/images//18190862.jpg' AS image_path FROM dual 
    UNION ALL 
    SELECT 'westminster/images//7_Glarus_Court.jpeg' AS image_path FROM dual 
) 
SELECT REGEXP_SUBSTR(image_path, '[^.]+', INSTR(image_path, '/', -1) + 1) 
    FROM d1; 

也就是說,找到所有非.(注意,逃避.是沒有必要的字符類中)字符最後/後。

輸出:

30_Fairhall_Court 
8_Furnival_Court 
9_Pennethorne_House 
TAVISTOCK_CRESCENT 
399932thumb 
18190862 
7_Glarus_Court 
相關問題