Вы можете использовать reverse
вместе с substring
и charindex
, чтобы получить то, что вы ищете:
select
reverse(substring(reverse(filename), 1,
charindex('.', reverse(filename))-1)) as FileExt
from
mytable
Это справедливо, даже если у вас есть несколько .
в файле (EG- hello.world.exe
вернется exe
).
Так что я играл немного с этим, и это еще один способ (только один вызов reverse
):
select
SUBSTRING(filename,
LEN(filename)-(CHARINDEX('.', reverse(filename))-2), 8000) as FileExt
from
mytable
Это вычисляет 10000000 строки в 25 секунд против 29 секунд для первого способа.
+1 хороший звонок! Мне было интересно, есть ли какой-нибудь простой способ справиться с несколькими ». в имени файла, не прибегая к грязному подсчету персонажа и синтаксическому анализу - молодец! –
charindex ('.', Reverse (filename)) - 1 не выполняется, если в имени файла нет точки. используется charindex ('.', reverse (filename)) – Rajesh
в Mysql вы можете использовать SUBSTRING_INDEX, например: SUBSTRING_INDEX (имя_файла, '.', -1), возможно, что-то похожее на sql-server –