Sql server 在SQL Server中获取子字符串
我想从点拆分的最后一个序列中获取SQL Server中的子字符串 我有一个列,其中包含诸如hello.exe之类的文件名,我希望找到文件的扩展名,就像C中的Path.GetExtensionfilename一样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
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