2012-06-13 34 views
1

我有一個問題,同時獲得與在SQL表像一列了擴展名的文件名,在SQL Server中使用SQL查詢獲取文件名以進行擴展

列名稱爲[圖]在DBO .emp表和值,

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

現在我想只得到溫度,爲test1,樣品,SAMPLE1用了擴展名爲.jpg,.jpeg..etc。

在此先感謝

Venkat

回答

1
select 
    SUBSTRING([image], 0, charindex('.', [image], 0)) 
from 
    [table] 
+0

非常感謝Dave,它的工作正常 – Venaikat

3
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 
+0

爲什麼在索引1開始,然後減去?另外,如果沒有'。'被發現,這會拋出一個異常,這在查詢中不是很理想...... – Dave

+0

@Dave在您的評論之前我已經添加了對「。」的處理。此外,從索引1開始只是習慣,因爲第一個字符=字符1,並且映射到LEFT如何處理它。 –

1

另一種方式;

;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

+1,因爲你的回答涵蓋了所有可能的情況:不是'。'或多個'。'在文件名中 – paccic