在SQL Server中获取子字符串

时间:2009-08-04 10:43:00

标签: sql-server

我希望从点(.)上的拆分的最后一个序列中获取SQL Server中的子字符串。

我有一个包含hello.exe等文件名的列,我希望在C#中找到与Path.GetExtension("filename")完全相同的文件扩展名。

5 个答案:

答案 0 :(得分:29)

您可以使用reverse以及substringcharindex来获取您想要的内容:

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

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

答案 1 :(得分:2)

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

DECLARE @extension VARCHAR(50)

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

SELECT @extension

应该这样做,我希望!只要您只有一个'。',这就有效。在您的文件名中 - 将文件名与扩展名分开。

马克

答案 2 :(得分:2)

试试这个

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

答案 3 :(得分:1)

与已接受的答案相同,但是当filename为空或filename没有扩展名(无分)时,我添加了一个条件以避免错误:

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

答案 4 :(得分: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