我有一個問題,同時獲得與在SQL表像一列了擴展名的文件名,在SQL Server中使用SQL查詢獲取文件名以進行擴展
列名稱爲[圖]在DBO .emp表和值,
temp.jpg
test1.jpg
test1.jpeg
sample.jpg
sample1.gif
現在我想只得到溫度,爲test1,樣品,SAMPLE1用了擴展名爲.jpg,.jpeg..etc。
在此先感謝
Venkat
我有一個問題,同時獲得與在SQL表像一列了擴展名的文件名,在SQL Server中使用SQL查詢獲取文件名以進行擴展
列名稱爲[圖]在DBO .emp表和值,
temp.jpg
test1.jpg
test1.jpeg
sample.jpg
sample1.gif
現在我想只得到溫度,爲test1,樣品,SAMPLE1用了擴展名爲.jpg,.jpeg..etc。
在此先感謝
Venkat
select
SUBSTRING([image], 0, charindex('.', [image], 0))
from
[table]
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
爲什麼在索引1開始,然後減去?另外,如果沒有'。'被發現,這會拋出一個異常,這在查詢中不是很理想...... – Dave
@Dave在您的評論之前我已經添加了對「。」的處理。此外,從索引1開始只是習慣,因爲第一個字符=字符1,並且映射到LEFT如何處理它。 –
另一種方式;
;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
+1,因爲你的回答涵蓋了所有可能的情況:不是'。'或多個'。'在文件名中 – paccic
非常感謝Dave,它的工作正常 – Venaikat