我有一个名为txt_Full_Path的SQL列,其数据如下所示
E:/My_Users//kpa1/eOReport - VSD.mrk
E:/My_Users//krishr9/Report.mrk
E:/My_Users//kristc/AllPAS.mrk
E:/My_Users//kukerm/v1.mrk
E:/My_Users//ksnedike/abcdef.mrk
首次出现'//'从左向右移动后如何获取值?
这样我就可以在新列中获取这些值。
kpa1
krishr9
kristc
kukerm
ksnedike
答案 0 :(得分:3)
DECLARE @x TABLE(y VARCHAR(64))
INSERT @x SELECT 'E:/My_Users//kpa1/eOReport - VSD.mrk'
UNION ALL SELECT 'E:/My_Users//krishr9/Report.mrk'
UNION ALL SELECT 'E:/My_Users//kristc/AllPAS.mrk'
UNION ALL SELECT 'E:/My_Users//kukerm/v1.mrk'
UNION ALL SELECT 'E:/My_Users//ksnedike/abcdef.mrk';
SELECT y, part = SUBSTRING(y, 2, CHARINDEX('/', y, 2)-2)
FROM (SELECT y = SUBSTRING(y, CHARINDEX('//', y) + 1, 64) FROM @x) AS z;
结果:
y part
------------------------ ----------
/kpa1/eOReport - VSD.mrk kpa1
/krishr9/Report.mrk krishr9
/kristc/AllPAS.mrk kristc
/kukerm/v1.mrk kukerm
/ksnedike/abcdef.mrk ksnedike
您可能还会遇到没有后续跟踪/
字符的情况,例如'E:/foo//bar'
- 如果是,那么:
SELECT y, part = SUBSTRING(y, 2, COALESCE(NULLIF(CHARINDEX('/', y, 2),0),66)-2)
FROM (SELECT y = SUBSTRING(y, CHARINDEX('//', y) + 1, 64) FROM @x) AS z;
答案 1 :(得分:2)
这很难看,但确实有效:
SELECT SUBSTRING(YourValue, CHARINDEX('//', YourValue) + 2,
ABS(CHARINDEX('/', YourValue, CHARINDEX('//', YourValue) + 2) -
(CHARINDEX('//', YourValue) + 2)))
FROM YourTable
修改强>
在ABS()
之后的最后一部分添加了/
功能,以处理没有//
的文件夹。