如何使用Trim获取中间词sqlserver2008

如何使用Trim获取中间词sqlserver2008,sql,sql-server-2008,Sql,Sql Server 2008,好了,伙计们,我用下面的trim语句填充不同的表,一个例子是 select Distinct rtrim(right(FilePath, charindex('\', reverse(FilePath)) - 1)) from [test].[dbo].[FileMetadata]s 要提取表中\之后的最后一个字符串,现在需要提取的字符串是此列中的ABC\\doc\dfs\SCPD\Metadata\Metadata\u Creation\u Process\Membe

好了,伙计们,我用下面的trim语句填充不同的表,一个例子是

select Distinct 
    rtrim(right(FilePath, charindex('\', reverse(FilePath)) - 1)) 
from 
    [test].[dbo].[FileMetadata]s 
要提取表中\之后的最后一个字符串,现在需要提取的字符串是此列中的ABC\\doc\dfs\SCPD\Metadata\Metadata\u Creation\u Process\Members\ABC\SELL

我该怎么办

谢谢你的帮助

@斯盖德斯

创建表[dbo].[FileMetadata][FileID][bigint]标识1,1不为空, [FileName][varchar]500不为空, [FilePath][nvarchar]500空, [SourceName][varchar]150空, [SenderName][varchar]150空, [FileSize][varchar]150空, [FileAttributes][varchar]100空, [FileExists][varchar]10空, [TypeID][int]NULL, [ReceivedDate][datetime]空, [FileModifiedDate][datetime]空, [ContentID][int]NULL, [TransMethodID][int]NULL, [ReceiverName][varchar]150空, [LastUpdateTime][datetime]空

因此,我需要从文件路径填充SourceName,例如 \Doc\dfs\SCPD\Metadata\Metadata\U Creation\U Process\Members\Femi\SELL,这里的源名称是Femi,因此最后一个\之前的内容始终是SourceName,我已使用LTRIM解决了它,但我喜欢您的逻辑,并希望使用您的逻辑填充SourceName。我希望这能更好地解释


谢谢

您可以引入一个拆分函数,或者使用我不久前学习的这个技巧,使用交叉应用,根据分隔符将数据拆分为多个字段:

WITH CTE AS (
  SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) rn,
  Split.a.value('.', 'VARCHAR(100)') AS filepart  
  FROM  
     (SELECT 
        CAST ('<M>' + REPLACE(FilePath, '\', '</M><M>') + '</M>' AS XML) AS String  
      FROM  FileMetadata
     ) AS A 
  CROSS APPLY String.nodes ('/M') AS Split(a)
)
SELECT C.FilePart
FROM CTE C
  JOIN (SELECT MAX(rn) maxRn FROM CTE) C2 ON C.rn = C2.maxRn-1

基本上,CTE以反斜杠作为分隔符分割数据,然后使用行号选择下一个到最后一个数据

因为你也用c标记了它,所以我建议你简单地将它拆分成c。如果你有多行,这里有一个更新的fiddle-get有点难看:谢谢你的帮助,它看起来很有效,但相信我在SQL中从未见过这样的东西,另外,如果我想将其用于多个组件,如\\doc\dfs\SCPD\Metadata\Metadata\u Creation\u Process\Members\dsw\IVNX,我该怎么办?您能否描述一下“/M”e.t。c@user2183502-np,很高兴这有帮助。多列是什么意思?@user2183502-你看到我在评论中更新的小提琴了吗-它应该允许你使用多行。关于它在做什么,基本上它用一些任意的XML节点来替换所有的反斜杠,但是任何XML节点都可以工作。然后,它将交叉应用程序与string.nodes一起使用,以拆分这些内置的XML解析,但正如您所说,很少使用。分割节点后,我使用row_number获取与每个节点关联的编号,然后使用maxrow_number-1获取倒数第二个节点。希望这有帮助!@斯盖德斯,我没有看到更新过的小提琴,我只是现在看到了,它像魔术一样工作。谢谢