[英]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.