直截了当的问题:)获取文件名在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