直截了當的問題:)獲取文件名在SQL Server存儲
我有一個存儲例如SQL Server中的列:
FileName Attachments_21046_123400100473.pdf
我需要抓住的文件擴展名之前的最後段在這種情況下,它將是123400100473
。
最後一段可能的字符大小各不相同,所以這裏是12個字符,但有時也可能是15
什麼會去了解這一點的最好方法是什麼?
直截了當的問題:)獲取文件名在SQL Server存儲
我有一個存儲例如SQL Server中的列:
FileName Attachments_21046_123400100473.pdf
我需要抓住的文件擴展名之前的最後段在這種情況下,它將是123400100473
。
最後一段可能的字符大小各不相同,所以這裏是12個字符,但有時也可能是15
什麼會去了解這一點的最好方法是什麼?
我不知道下劃線最後一段之前多少來,所以我扭轉串並找到第一個下劃線...
DECLARE @FileName VARCHAR(50)
SET @FileName = 'Attachments_21046_123400100473.pdf'
SELECT REVERSE(
SUBSTRING(
REVERSE(@FileName),
5, -- Length of extension + 1.
CHARINDEX('_', REVERSE(@FileName)) - 5
)
)
通過組合T-SQL的CHARINDEX和SUBSTRING函數,您可以非常輕鬆地完成此任務。
這是一個小黑客,但只取決於兩個下劃線和一段時間的存在。例如%_%_%.%
擴展名可以是任意長度,以及最終的字符串:
編輯:更新處理變量下劃線出現:
create function udfGetFileNameSubstring(@val as varchar(50))
returns varchar(50)
begin
--declare @val varchar(50)
--set @val = 'Attachments_21046_123400100473.pdf'
declare @uidx int
-- establish the index of the 2nd underscore
set @uidx = LEN(@val) - CHARINDEX('_', REVERSE(@val)) + 1
declare @pidx int
-- establish the index of the period
set @pidx = CHARINDEX('.', @val)
return SUBSTRING(@val, @uidx + 1, @pidx - @uidx - 1)
end
-- usage: SELECT dbo.udfGetFileNameSubstring(col_name) FROM table_name
-- sample: SELECT dbo.udfGetFileNameSubstring('Attachments_21046_123400100473.pdf')
-- OUTPUT: 123400100473
的T-SQL,當然可以略,我也把它包在UDF中用於查詢中的清潔使用。
我翻查了一些數據,並且有一些字段有一個以上的下劃線。但是,這些是我可以忽略的記錄。這不會解決你的問題,是嗎? – RogueSpear00 2012-02-03 17:41:46
@ RogueSpear00:它會絆倒我的解決方案。我會調整它來處理變量下劃線。 – 2012-02-03 18:00:28
@ RogueSpear00:其實很簡單。檢查編輯的代碼 – 2012-02-03 18:06:15
SELECT SUBSTRING(f.FileName,0,CHARINDEX('.', f.FileName)) AS 'last_segment'
您的答案返回整個文件名。我正在嘗試獲取最後一部分,請參閱我在文件名示例下編寫的內容。 – RogueSpear00 2012-02-03 17:06:55
你應該有足夠的空間來解決這個問題。看看tsql的字符串函數 – 2012-02-03 17:14:51
begin
DECLARE @a varchar(100) = 'Attachments_21046_123400100473.pdf';
DECLARE @b varchar(100) = REVERSE(@a)
SELECT SUBSTRING(@a, LEN(@a) - CHARINDEX('_', @b) + 2, CHARINDEX('_', @b) - CHARINDEX('.', @b) - 1)
end;
如果格式/長度總是相同的。這可能是最簡單的。
select left(right(@Filename,16),12)
格式總是相同的,它實際上是「Attachments_IDNumber_SecondNumber.PDF」 – RogueSpear00 2012-02-03 17:09:16
@ RogueSpear00啊,好吧......我就這樣離開它,因爲即使我知道前導下劃線的數量,它看起來不漂亮。 – 2012-02-03 17:13:57
這工作。現在我必須理解這個陳述。 – RogueSpear00 2012-02-03 17:26:33