【发布时间】:2019-10-22 15:26:20
【问题描述】:
我有一个像这样的字符串 '/1064_MyHoldings/ONLINE/Adhoc/Rpt_CompanyCodeElig' 我只想提取 '1064_MyHoldings' 就像这样有不同的字符串,我只想要前两个分隔符之间的字符串的第一部分?
select
left(Applications, Len(Path) - CHARINDEX('/', Applications) + 1) FolderName
from
(select distinct
Substring(C.Path, CHARINDEX('/', C.Path) + 1, LEN(C.Path) - CHARINDEX('/', C.Path)) Applications) Result
其中 Applications 是具有类似“/1064_MyHoldings/ONLINE/Adhoc/Rpt_CompanyCodeElig”的数据的列名
预期结果应该是“1064_MyHoldings”,它只是前两个“/”之间的字符串的第一部分
【问题讨论】:
-
如果你能放更多的信息,比如源字符串是 xxxxx,期望的字符串是 yyy,这将有助于人们更好地理解你。
-
@Tim Biegeleisen 为问题添加了生动的描述
-
您应该努力使用 SQL 中的规范化数据。由于许多原因,使用分隔字符串将多个不同的数据点存储在同一列、参数或变量中确实是一种不好的做法 - 请阅读它们here。
-
@ZoharPeled 在某些用例中,将路径存储在数据库表中不一定是不好的做法。例如,它可能来自应用层(但是,在这种情况下,在应用层处理这个需求可能更有意义)。
-
@TimBiegeleisen 路径不是分隔字符串。诚然,没有将问题中的字符串识别为路径可能是我的错 - 但是路径是一个(复合)数据点。我说的不是这种情况。我说的是存储
1,2,3,4或a/b/c/d之类的东西,其中分隔字符串的每个部分都是一个“项目”。