2

このようなSQLテーブルの列から拡張子のないファイル名を取得するときに問題が発生します。

列名は[image]テーブルdbo.empにあり、値は次のとおりです。

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

今、私は、、、、拡張子なしで、、、などだけをtemp取得したい…</ p> test1samplesample1.jpg.jpeg

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が見つからない場合の対処方法を指定していません。.それを処理し、何も見つからないときに文字列全体を返したい場合は、次のようにします。

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 に答える