Sql server 在SQL Server中获取子字符串

Sql server 在SQL Server中获取子字符串,sql-server,Sql Server,我想从点拆分的最后一个序列中获取SQL Server中的子字符串 我有一个列,其中包含诸如hello.exe之类的文件名,我希望找到文件的扩展名,就像C中的Path.GetExtensionfilename一样 DECLARE @originalstring VARCHAR(100) SET @originalstring = 'hello.exe' DECLARE @extension VARCHAR(50) SET @extension = SUBSTRING(@originalstri

我想从点拆分的最后一个序列中获取SQL Server中的子字符串

我有一个列,其中包含诸如hello.exe之类的文件名,我希望找到文件的扩展名,就像C中的Path.GetExtensionfilename一样

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

DECLARE @extension VARCHAR(50)

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

SELECT @extension
我希望这样就可以了!只要您的文件名中只有一个“.”就可以使用此功能—将文件名与扩展名分开

Marc

您可以使用并获得您想要的:

select
    reverse(substring(reverse(filename), 1, 
        charindex('.', reverse(filename))-1)) as FileExt
from
    mytable
即使您有多个,这仍然有效。在您的文件中,例如-hello.world.exe将返回exe

所以我一直在玩这个,这是另一种方法,只有一个呼叫可以反转:

这将在25秒内计算10000000行,而前一种方法为29秒。

试试这个

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

与接受的答案相同,但我添加了一个条件,以避免在文件名为null或文件名没有扩展名时出错:

select
    reverse(substring(reverse(filename), 1, 
        charindex('.', reverse(filename))-1)) as FileExt
from
    mytable
where 
    filename is not null
and charindex('.',filename) > 0

下面的SQL请求处理了我的怪异数据库中的大多数边缘情况,其中许多文件没有扩展名

select distinct reverse(left(reverse(fileNameWithExtension), charindex('.', reverse(fileNameWithExtension)) - 1))
from myTable
where charindex('.', reverse(fileNameWithExtension)) - 1 > 0 and charindex('.', reverse(fileNameWithExtension)) - 1 < 7 and fileNameWithExtension is not null

+一个好电话!我想知道是否有任何简单的方法来处理文件名中的多个“.”,而不必使用混乱的字符计数和解析-做得好!charindex“.”,当文件名中没有点时,reversefilename-1失败。使用charindex'.',reverseFileName在Mysql中可以使用SUBSTRING_INDEX,例如:SUBSTRING_INDEXfile_name'.',1,可能有类似于sql Server的内容如果100%确定原始字符串变量中只有一个句点Fullstop,这是一个很好的答案。否则,批准的版本更好。
select distinct reverse(left(reverse(fileNameWithExtension), charindex('.', reverse(fileNameWithExtension)) - 1))
from myTable
where charindex('.', reverse(fileNameWithExtension)) - 1 > 0 and charindex('.', reverse(fileNameWithExtension)) - 1 < 7 and fileNameWithExtension is not null