2016-12-20 3 views
0

パスに沿ってイメージを保存するテーブルにカラムがあります。以下はSQLテーブルから完全なパスを持たない拡張子を持つイメージ名のみを取得する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 

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# –

+0

で 'Path.GetFileName()'のように使う方がずっと簡単です。ディレクトリとファイル名を分割してDBに保存することをお勧めします。永続的な計算フィールド( '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

ありがとうAbhishek。これも完璧に機能しました。 – Azhar

0

ます後で最後のアイテムを取得するためにsplit関数を使用することができます

これを試してみてください。

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

これはまた働いてくれてありがとう。私はリバースとCHARINDEX関数で使用0を理解する助けてください、私はSQLの初心者です。 – Azhar

関連する問題