2016-12-20 42 views
0

我有一個表中的列,保存圖像與路徑一起。SQL查詢獲取只有擴展名的圖像名稱沒有從SQL表完整的路徑

下面是一些圖像路徑例子:

/Products_images/Essentials/111219_Essent_Org_Red_Clsd-XL.jpg 
    /ul/products/1417/130514-Montecito-20-spinner-French-Roast.jpg 
    /ul/products/1470/130419_RodeoDrive_20HybridRed-M.jpg 
    /ul/newproducts/266-07-437-TVC-main.jpg 

當我使用SQL查詢:

select Image from Product 

它返回它應該是完整的圖像路徑。

我怎樣才能從這個圖像列沒有圖像路徑獲取擴展名的圖像名稱。

所以我需要的結果應該是:

111219_Essent_Org_Red_Clsd-XL.jpg 
130514-Montecito-20-spinner-French-Roast.jpg 
130419_RodeoDrive_20HybridRed-M.jpg 
266-07-437-TVC-main.jpg 

有沒有什麼辦法讓這種直接使用SQL查詢,並沒有使用C#代碼。

SQL Server中是否存在任何子字符串或正則表達式?

我會非常感謝您的幫助。

謝謝。這樣做的

+2

你爲什麼要去做,在SQL?在C#中使用'Path.GetFileName()'更容易 - –

+0

我建議你將目錄和文件名_before_分割存儲在數據庫中。你甚至可以創建一個持久計算的字段('Image AS DirectoryName + FileName PERSISTED'),所以你仍然可以使用你的組合路徑。如果你在'WHERE'中使用你的文件名,這應該也會更好,你可以索引任何你需要的字段。 – Sefe

+0

其實我是從excel文件中導出大量的數據。你是正確的,它可以通過C#完成,但我想直接從數據庫中獲取。 Banshi Gurjar和Abhishek的回答對我的情況非常合適。非常感謝。 – Azhar

回答

0

你可以嘗試

declare @a VARCHAR(200) 
set @a = ' /Products_images/Essentials/111219_Essent_Org_Red_Clsd-XL.jpg' 

select right(@a, charindex('/', reverse(@a)) - 1) as filename 

在你的情況

Select right(ColumnName, charindex('/', reverse(ColumnName)) - 1) as filename From TableName 
0

一種方式 -

DECLARE @Image TABLE (Imagepath VARCHAR(2000)) 
INSERT INTO @Image(Imagepath) 
SELECT '/Products_images/Essentials/111219_Essent_Org_Red_Clsd-XL.jpg' UNION 
SELECT '/ul/products/1417/130514-Montecito-20-spinner-French-Roast.jpg' UNION 
SELECT '/ul/products/1470/130419_RodeoDrive_20HybridRed-M.jpg' UNION 
SELECT '/ul/newproducts/266-07-437-TVC-main.jpg' 
SELECT REVERSE(SUBSTRING(REVERSE(Imagepath),1,CHARINDEX('/',REVERSE(Imagepath))-1)) FROM @Image 
+0

謝謝阿布舍克。這也很完美。 – Azhar

0

當你在你的字符串有你的圖像名稱和路徑你可以使用分割功能獲得最後一個項目後面的/

試試這個:

string onlyImageName = stringFullPathAndName.Split('/').Last(); 
+2

這不是一個好主意。首先,'Path.GetFileName()'已經做到了。其次,拆分會產生大量不必要的臨時字符串 –

0

使用SQL函數只提取文件名:

SELECT 
LTRIM(
    RTRIM(
    REVERSE(
    SUBSTRING(
    REVERSE(ImagePath), 
    0, 
    CHARINDEX('/', REVERSE(ImagePath),0) 
    ) 
    ) 
) 
) AS FilenameOnly 
FROM SomeTable 

Fname

+0

謝謝,這也工作。我在SQL中有點新手,請你幫我理解在REVERSE和CHARINDEX函數中使用0。 – Azhar

相關問題