Sql server 在SQL server中使用SQL查询获取不带扩展名的文件名
从SQL表中的列中获取扩展名为out的文件名时出现问题,如下所示 在Sql server 在SQL server中使用SQL查询获取不带扩展名的文件名,sql-server,tsql,Sql Server,Tsql,从SQL表中的列中获取扩展名为out的文件名时出现问题,如下所示 在dbo.emp表中,列名为[image],值为: temp.jpg test1.jpg test1.jpeg sample.jpg sample1.gif 现在我只想得到temp,test1,sample,sample1,不带扩展名.jpg,.jpeg,等等 DECLARE @x VARCHAR(32); SET @x = 'temp.jpg'; SELECT SUBSTRING(@x, 1, CHARINDEX('.', @
dbo.emp
表中,列名为[image]
,值为:
temp.jpg
test1.jpg
test1.jpeg
sample.jpg
sample1.gif
现在我只想得到temp
,test1
,sample
,sample1
,不带扩展名.jpg
,.jpeg
,等等
DECLARE @x VARCHAR(32);
SET @x = 'temp.jpg';
SELECT SUBSTRING(@x, 1, CHARINDEX('.', @x)-1);
-- or SELECT LEFT(@x, CHARINDEX('.', @x)-1);
结果:
temp
但是,这并没有指定在未找到
时要执行的操作。如果要处理该问题并在未找到
时返回整个字符串:
DECLARE @x TABLE([image] VARCHAR(32));
INSERT @x SELECT 'temp.jpg' UNION ALL SELECT 'sample1.gif' UNION ALL SELECT 'foo';
SELECT SUBSTRING([image], 1, COALESCE(NULLIF(CHARINDEX('.', [image]),0)-1, 32)) FROM @x;
结果:
temp
x
foo
另一种方式:
left(fn, len(fn) - charindex('.', reverse(fn)))
例如
为了
为什么从索引1开始,然后减去?另外,如果没有找到“.”,这会引发一个异常,这在查询中并不理想…@Dave在您的评论之前,我已经为no
添加了处理。另外,从索引1开始只是一种习惯,因为第一个字符=字符1,这映射到LEFT如何处理它。+1,因为您的答案涵盖了所有可能的情况:文件名中没有“.”或多个“.”
left(fn, len(fn) - charindex('.', reverse(fn)))
;with T (fn) as (
select '' union
select 'aaa' union
select 'aaa.bbb' union
select 'aaa.bbb.ccc'
)
select left(fn, len(fn) - charindex('.', reverse(fn))) from T
(No column name)
aaa
aaa
aaa.bbb