我有一個問題,我試圖'.'從 SSMS 下面的字串/檔案名中洗掉所有的,除了最后一個指示檔案型別的。
EPC 14.10.14.pdf
理想情況下,我希望這個字串如下所示:
EPC 141014.pdf
任何幫助,將不勝感激
uj5u.com熱心網友回復:
用途replace,substring和len功能
select replace(substring(@x,0,len(@x) - 3),'.','') substring(@x,len(@x) - 3,len(@x))
編輯: 如果名稱擴展有可變長度,您可以使用以下查詢
select replace(substring(@x,0,len(@x) - CHARINDEX('.',REVERSE(@x))),'.','')
substring(@x,len(@x) - CHARINDEX('.',REVERSE(@x)),len(@x))
結果
uj5u.com熱心網友回復:
declare @doc varchar(30) = 'EPC 14.10.14.pdf' declare @ext varchar(8) = right(@doc, charindex('.', reverse(@doc))); set @doc = concat(replace(left(@doc,len(@doc)-len(@ext)),'.',''), @ext); select @doc as doc;
| 檔案 |
|---|
| EPC 141014.pdf |
db<>在這里擺弄
uj5u.com熱心網友回復:
如果您有不同長度的擴展名(例如docx, xls),您需要使用and查找.字符最后一次出現的索引:REVERSE()CHARINDEX()
SELECT CONCAT(
REPLACE(SUBSTRING(SomeText, 1, LEN(SomeText) - CHARINDEX('.', REVERSE(SomeText))), '.', ''),
STUFF(SomeText, 1, LEN(SomeText) - CHARINDEX('.', REVERSE(SomeText)), '')
) AS FileName
FROM (VALUES
('EPC 14.10.14.pdf'),
('EPC 14.10.14.docx'),
('14.10.14.xlsx')
) t (SomeText)
結果:
FileName
----------------
EPC 141014.pdf
EPC 141014.docx
141014.xlsx
uj5u.com熱心網友回復:
還有一種方法。
SQL
SELECT fileName AS [Before]
, CONCAT(CONCAT(PARSENAME(fileName,4), PARSENAME(fileName,3), PARSENAME(fileName,2))
, '.', PARSENAME(fileName,1)) AS [After]
FROM (VALUES
('EPC 14.10.14.pdf'),
('EPC 14.10.14.docx'),
('14.10.14.xlsx'),
('csharp.10.14.cs')
) AS t(fileName);
輸出
------------------- -----------------
| Before | After |
------------------- -----------------
| EPC 14.10.14.pdf | EPC 141014.pdf |
| EPC 14.10.14.docx | EPC 141014.docx |
| 14.10.14.xlsx | 141014.xlsx |
| csharp.10.14.cs | csharp1014.cs |
------------------- -----------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422054.html
標籤:
