我有一个包含整个文件名的列的表,数据如下:
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()
功能。如何以简单的方式剪切子字符串?
答案 0 :(得分:49)
您可以通过以下方式获取扩展程序:
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
答案 1 :(得分:5)
SELECT CASE
WHEN filepath LIKE '%.%' THEN RIGHT(filepath, Len(filepath) -
Charindex('.', filepath))
ELSE filepath
END FilePath
FROM tbl1
答案 2 :(得分:2)
在寻找特定扩展,处理有许多点的文本时,以下内容提供了更具体的方法。
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
答案 3 :(得分:0)
您可以通过以下方式获取文件扩展名:
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)
答案 4 :(得分:-2)
select:invalid + button {
display: none;
}
select:valid + button {
display: inline-block;
}