2

从这样的 SQL 表中的列中获取不带扩展名的文件名时遇到问题。

列名[image]dbo.emp表中,值为:

temp.jpg
test1.jpg
test1.jpeg
sample.jpg
sample1.gif

现在我只想得到temp, test1, sample,sample1不带扩展名.jpg,.jpeg等等……</p>

4

3 回答 3

3
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
于 2012-06-13T11:53:20.877 回答
2

另一种方式:

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
于 2012-06-13T12:01:28.383 回答
1
select 
    SUBSTRING([image], 0, charindex('.', [image], 0)) 
from 
    [table]
于 2012-06-13T11:53:29.213 回答