Получить подстроку в 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)