从这样的 SQL 表中的列中获取不带扩展名的文件名时遇到问题。
列名[image]
在dbo.emp
表中,值为:
temp.jpg
test1.jpg
test1.jpeg
sample.jpg
sample1.gif
现在我只想得到temp
, test1
, sample
,sample1
不带扩展名.jpg
,.jpeg
等等……</p>
从这样的 SQL 表中的列中获取不带扩展名的文件名时遇到问题。
列名[image]
在dbo.emp
表中,值为:
temp.jpg
test1.jpg
test1.jpeg
sample.jpg
sample1.gif
现在我只想得到temp
, test1
, sample
,sample1
不带扩展名.jpg
,.jpeg
等等……</p>
DECLARE @x VARCHAR(32);
SET @x = 'temp.jpg';
SELECT SUBSTRING(@x, 1, CHARINDEX('.', @x)-1);
-- or SELECT LEFT(@x, CHARINDEX('.', @x)-1);
结果:
temp
.
但是,这并没有指定如果找不到a 该怎么做。如果您想处理它并在.
找到 no 时返回整个字符串:
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)))
例如
;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
select
SUBSTRING([image], 0, charindex('.', [image], 0))
from
[table]