在SQL Server中获取子字符串

Raj*_*sh 16 sql-server

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

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

Eri*_*ric 29

您可以使用reverse沿substringcharindex让你在找什么:

select
    reverse(substring(reverse(filename), 1, 
        charindex('.', reverse(filename))-1)) as FileExt
from
    mytable
Run Code Online (Sandbox Code Playgroud)

即使.您的文件中有多个(例如,hello.world.exe将返回exe),这也会成为现实.

所以我正在玩这个,这是另一种方式(只有一次调用reverse):

select 
    SUBSTRING(filename, 
        LEN(filename)-(CHARINDEX('.', reverse(filename))-2), 8000) as FileExt
from
    mytable
Run Code Online (Sandbox Code Playgroud)

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

  • +1好电话!我想知道是否有任何简单的方法可以处理多个“。”。文件名中,无需进行混乱的字符计数和解析-做得好! (2认同)
  • 当文件名中没有点时,charindex('.', reverse(filename))-1 失败。使用 charindex('.', reverse(filename)) (2认同)