Puedes usar reverse junto con substring y charindex para conseguir lo que buscas:
select
reverse(substring(reverse(filename), 1,
charindex('.', reverse(filename))-1)) as FileExt
from
mytable
Esto se mantiene, incluso si tiene varios . en su archivo (p. ej.-hello.world.exe devolverá exe ).
Así que estaba jugando un poco con esto, y esta es otra forma (solo una llamada a reverse ):
select
SUBSTRING(filename,
LEN(filename)-(CHARINDEX('.', reverse(filename))-2), 8000) as FileExt
from
mytable
Esto calcula 10 000 000 de filas en 25 segundos frente a los 29 segundos del método anterior.