[英]T-SQL Get File Extension Name from a Column
我有一个包含整个文件名的列的表,数据如下所示:
FilePath FileSize
------------------------------ --------
dsch2_chs_wyj.rar 694KB
AllInOneHash.rar 19KB
FilePropertyModifier.rar 12KB
jquery_1_7_api_chm_chs.rar 285KB
startupmgr.rar 38KB
JQueryTableExample_Edi.rar 33KB
hdpartioncalc_csharp.rar 49KB
XMLMenuTest.zip 3KB
现在我想提取文件扩展名,比如.rar
并插入到一个新表中。
INSERT INTO Attachment
(
Id,
[FileName],
ExtensionName,
StoredPath,
CreateOn,
UploaderIP,
DataBinary
)
SELECT ba.Id,
ba.Title,
'{Extension Name}',
ba.FilePath,
GETDATE(),
NULL,
NULL
FROM BlogAttachment ba
但是 T-SQL 没有LastIndexOf()
函数。 如何以简单的方式剪切子字符串?
您可以通过执行以下操作来获取扩展名:
select reverse(left(reverse(FilePath), charindex('.', reverse(FilePath)) - 1))
但是,我建议您检查是否有'.'
首先在名称中:
select (case when FilePath like '%.%'
then reverse(left(reverse(FilePath), charindex('.', reverse(FilePath)) - 1))
else ''
end) as Extension
SELECT CASE
WHEN filepath LIKE '%.%' THEN RIGHT(filepath, Len(filepath) -
Charindex('.', filepath))
ELSE filepath
END FilePath
FROM tbl1
在查找特定扩展名以及处理确实有很多点的文本时,以下提供了更具体的方法。
with extensionTable ([extension]) AS
(
SELECT '.pdf'
UNION ALL SELECT '.txt'
UNION ALL SELECT '.doc'
UNION ALL SELECT '.docx'
UNION ALL SELECT '.xls'
UNION ALL SELECT '.xlsx'
UNION ALL SELECT '.ppt'
UNION ALL SELECT '.pptx'
UNION ALL SELECT '.zip'
UNION ALL SELECT '.tar.gz'
UNION ALL SELECT '.htm'
UNION ALL SELECT '.html'
)
SELECT T2.[extension]
, T1.[document_file_name]
FROM tbl T1
OUTER APPLY ( SELECT TOP 1 [extension]
FROM extensionTable
WHERE CHARINDEX([extension], T1.[document_file_name]) > 0
ORDER BY CHARINDEX([extension], T1.[document_file_name]) DESC, LEN([extension]) DESC
) T2
您可以通过这种方式获取文件扩展名:
select right('https://google.com/1.png', charindex('.', reverse('https://google.com/1.png') + '.') - 1)
您可以通过这种方式获取文件名:
select right('https://google.com/1.png', charindex('/', reverse('https://google.com/1.png') + '/') - 1)
回答为时已晚,但我找到了解决方案,如何从 sql 列获取图像或文件的扩展名,并在任何关键字或“\/”或“。”之后获取任何字符串....只需替换“。” 用你的关键字。
SELECT SUBSTR("string_or_colname",(SELECT POSITION("." IN"string_or_colname")));
# and if you wanted to get from starting then add 0 after
string_or_colname,then postion
eg :
SELECT SUBSTR("string_or_colname",1,(SELECT POSITION("." IN"string_or_colname")));
declare @filepath char(250) = 'c:\powersql\database\teste.txtdat'
Declare @NewExtesion Char(15) = 'Old'
-- @filepath char(250) = 'c:\powersql\database\teste.txtdat'
-- select len(@FilePath) = 33
-- Select Charindex('.', @filepath) = Len of Filepath before Extension
-- select RIGHT(rtrim(@filepath) ,len(@FilePath) - Charindex('.', @filepath) ) = txtdat (extension i would like to change)
-- select REPLACE(@filepath, RIGHT(rtrim(@filepath) ,len(@FilePath) - Charindex('.', @filepath)), 'xxx')
-- here i changed .txdat to xxx
-- below the full query
SELECT
CASE
WHEN @filepath LIKE '%.%'
THEN REPLACE(@filepath, RIGHT(rtrim(@filepath) ,len(@FilePath) - Charindex('.', @filepath)), @NewExtesion)
ELSE @filepath
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.