Получить подстроку в SQL Server - PullRequest
16 голосов
/ 04 августа 2009

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

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

Ответы [ 3 ]

29 голосов
/ 04 августа 2009

Вы можете использовать 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 голосов
/ 16 мая 2011

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

SELECT RIGHT(
             'C:\SomeRandomFile\Filename.dat',
             CHARINDEX(
                       '.',
                       REVERSE(
                               'C:\SomeRandomFile\Filename.dat'
                              ),
                       0)
              -1)
2 голосов
/ 04 августа 2009
DECLARE @originalstring VARCHAR(100)
SET @originalstring = 'hello.exe'

DECLARE @extension VARCHAR(50)

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

SELECT @extension

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

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...