このようなSQLテーブルの列から拡張子のないファイル名を取得するときに問題が発生します。
列名は[image]
テーブルdbo.emp
にあり、値は次のとおりです。
temp.jpg
test1.jpg
test1.jpeg
sample.jpg
sample1.gif
今、私は、、、、拡張子なしで、、、などだけをtemp
取得したい…</ p>
test1
sample
sample1
.jpg
.jpeg
このようなSQLテーブルの列から拡張子のないファイル名を取得するときに問題が発生します。
列名は[image]
テーブルdbo.emp
にあり、値は次のとおりです。
temp.jpg
test1.jpg
test1.jpeg
sample.jpg
sample1.gif
今、私は、、、、拡張子なしで、、、などだけをtemp
取得したい…</ p>
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
.
ただし、これは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
別の方法:
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]