我希望从点(.
)上的拆分的最后一个序列中获取SQL Server中的子字符串。
我有一个包含hello.exe
等文件名的列,我希望在C#中找到与Path.GetExtension("filename")
完全相同的文件扩展名。
答案 0 :(得分:29)
您可以使用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
这在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