2016-12-20 44 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

相关问题