23

Possible Duplicate:
Get substring in SQL Server

Let's say I have MyImage.png or MyDoc.doc, etc in a column in a database table.

How can I only get the file extension?

Community
  • 1
  • 1
Imran Qadir Baksh - Baloch
  • 32,612
  • 68
  • 179
  • 322

5 Answers5

50

try this:

declare @str varchar(20)='MyDoc.doc';
select reverse(left(reverse(@str),charindex('.',reverse(@str))-1))

###SQL fiddle demo

luiscla27
  • 4,956
  • 37
  • 49
Joe G Joseph
  • 23,518
  • 5
  • 56
  • 58
  • 4
    Fails if @str does not contain a '.' – Todd Smith Apr 15 '14 at 11:31
  • 2
    Good answer, but not supporting stripping away querysrings, like "index.html?id=1". But besides that, good answer :-) – Mats Magnem Feb 04 '15 at 19:03
  • 1
    Add a check to check if '.' is present in the filename else return the filename itself `declare @str varchar(20)='MyDocdoc'; select CASE WHEN charindex('.',@str) > 0 THEN reverse(left(reverse(@str),charindex('.',reverse(@str))-1)) ELSE @str END` – Idris Jun 09 '21 at 11:47
14

Try this:

SELECT parsename(filename,1) FROM yourTable

sqlfiddle demo

luiscla27
  • 4,956
  • 37
  • 49
praveen
  • 12,083
  • 1
  • 41
  • 49
5

With string functions:

SELECT Extension =
   Right([Name],
        CHARINDEX('.',
                  REVERSE([Name]))-1)
FROM dbo.Files

SQL fiddle demo

luiscla27
  • 4,956
  • 37
  • 49
Tim Schmelter
  • 450,073
  • 74
  • 686
  • 939
  • 6
    This breaks on filenames without extension: `Invalid length parameter passed to the right function.` – Nickolay Jan 02 '18 at 16:06
4
SELECT RIGHT('myFile.txt', 
               CHARINDEX('.', REVERSE('myFile.txt'))-1) AS 'File Extension'

Documentation: SUBSTRING, RIGHT, CHARINDEX, REVERSE

luiscla27
  • 4,956
  • 37
  • 49
CloudyMarble
  • 36,908
  • 70
  • 97
  • 130
3
declare @str varchar(20)='MyDoc.doc'
select reverse(left(reverse(@str),CHARINDEX('.',reverse(@str))-1))

FIDDLE DEMO

luiscla27
  • 4,956
  • 37
  • 49
AnandPhadke
  • 13,160
  • 5
  • 26
  • 33