Получить подстроку в SQL Server

Я хочу получить подстроку в SQL Server из последней последовательности разделения на точку (.).

У меня есть столбец, содержащий имена файлов, такие как hello.exe, и я хочу найти расширение файла точно так же, как Path.GetExtension("filename") на С#.

Ответ 1

Вы можете использовать reverse вместе с substring и charindex, чтобы получить то, что вы ищете:

select
    reverse(substring(reverse(filename), 1, 
        charindex('.', reverse(filename))-1)) as FileExt
from
    mytable

Это сохраняется, даже если в вашем файле несколько . (например.- hello.world.exe вернет exe).

Итак, я немного поиграл с этим, и это другой способ (только один вызов reverse):

select 
    SUBSTRING(filename, 
        LEN(filename)-(CHARINDEX('.', reverse(filename))-2), 8000) as FileExt
from
    mytable

Это вычисляет 10 000 000 строк за 25 секунд против 29 секунд для первого метода.

Ответ 2

DECLARE @originalstring VARCHAR(100)
SET @originalstring = 'hello.exe'

DECLARE @extension VARCHAR(50)

SET @extension = SUBSTRING(@originalstring, CHARINDEX('.', @originalstring) + 1, 999)

SELECT @extension

Это должно сделать это, я надеюсь! Это работает, пока у вас есть только один. в вашем имени файла - разделение имени файла с расширением.

Марк

Ответ 3

Попробуйте это

SELECT RIGHT(
             'C:\SomeRandomFile\Filename.dat',
             CHARINDEX(
                       '.',
                       REVERSE(
                               'C:\SomeRandomFile\Filename.dat'
                              ),
                       0)
              -1)