我试图找到一种方法来提取下面的部分字符串。我需要第 6 个和第 7 个\
字符之间的所有内容。
\\fileServerA\d$\LiteSpeed\Wednesday\ServerA\Tlog\DBA1_TLOG_20110504_0333.SLS
\\fileServerA\d$\LiteSpeed\Wednesday\ServerB\Tlog\model_TLOG_20120321_1038.SLS
\\fileServerA\d$\LiteSpeed\Saturday\ServerA\TLog\DBA_2_TLOG_20120811_1538.SLS
\\fileServerA\d$\LiteSpeed\Friday\ServerB\Tlog\DB3_TLOG_20120914_2330.BAK
\\fileServerA\d$\LiteSpeed\Wednesday\ServerC\Tlog\DB44_TLOG_20120815_1445.BAK
Run Code Online (Sandbox Code Playgroud)
预期结果:
ServerA
ServerB
ServerA
ServerB
ServerC
Run Code Online (Sandbox Code Playgroud)
好吧,一种方法是使用有序 split 函数:
CREATE FUNCTION dbo.SplitStringsOrdered
(
@List NVARCHAR(2000),
@Delimiter NVARCHAR(32)
)
RETURNS TABLE
AS
RETURN
(
SELECT rn = ROW_NUMBER() OVER (ORDER BY Number), Item
FROM (SELECT Number, Item = LTRIM(RTRIM(SUBSTRING(@List, Number,
CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number)))
FROM (SELECT ROW_NUMBER() OVER (ORDER BY [object_id])
FROM sys.all_objects) AS n(Number)
WHERE Number <= CONVERT(INT, LEN(@List))
AND SUBSTRING(@Delimiter + @List, Number, LEN(@Delimiter)) = @Delimiter
) AS y);
Run Code Online (Sandbox Code Playgroud)
使用示例:
DECLARE @x TABLE(filepath NVARCHAR(2000));
INSERT @x VALUES
('\\fileServerA\d$\LiteSpeed\Wednesday\ServerA\Tlog\DBA1_TLOG_20110504_0333.SLS'),
('\\fileServerA\d$\LiteSpeed\Wednesday\ServerB\Tlog\model_TLOG_20120321_1038.SLS'),
('\\fileServerA\d$\LiteSpeed\Saturday\ServerA\TLog\DBA_2_TLOG_20120811_1538.SLS'),
('\\fileServerA\d$\LiteSpeed\Friday\ServerB\Tlog\DB3_TLOG_20120914_2330.BAK'),
('\\fileServerA\d$\LiteSpeed\Wednesday\ServerC\Tlog\DB44_TLOG_20120815_1445.BAK');
SELECT x.filepath, s.Item FROM @x AS x
CROSS APPLY dbo.SplitStringsOrdered(x.filepath, '\') AS s
WHERE s.rn = 7;
Run Code Online (Sandbox Code Playgroud)
结果:
filepath Item
------------------------------------------- -------
\\file...eed\Wednesday\ServerA\Tlog\DBA1... ServerA
\\file...eed\Wednesday\ServerB\Tlog\mode... ServerB
\\file...eed\Saturday\ServerA\TLog\DBA_2... ServerA
\\file...eed\Friday\ServerB\Tlog\DB3_TLO... ServerB
\\file...eed\Wednesday\ServerC\Tlog\DB44... ServerC
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23283 次 |
最近记录: |