提问人:whitchurch11 提问时间:11/18/2023 更新时间:11/18/2023 访问量:22
获取字符串 在字符的第 n 个实例之后和另一个字符的实例之前
Get string after nth instance of a character and before an instance of another character
问:
我有一个充满网络路径的表(文档文件)。我需要从“destination”列减去文件扩展名中提取文档名称,然后将其插入到同一表中的列中。
例如,我有一个示例路径:
J:\RootFolder\Subfolder\Reference\481789.pdf
我需要提取481789并将其插入到名为“column3”的下一列中。
每条路径上的结构都是相同的,所以我正在寻找第 4 个实例之后和之前的字符串'\'
'.'
我相信一定有一种更优雅的方法来解决这个问题,但到目前为止,我已经尝试了以下方法,并且我已经设法修剪了扩展,并且只有第一个实例。我正在努力嵌套 CHARINDEX 以获得第 4 个实例。'\'
我还没有走得足够远,然后进行插入。
SELECT
destination,
SUBSTRING(destination, CHARINDEX('\', destination),
CHARINDEX('.', destination) - CHARINDEX('\', destination)) AS substring
FROM documentfiles
答:
0赞
nbk
11/18/2023
#1
在 sql server 中,您可以执行以下操作
DECLARE @t varchar(100) = 'J:\RootFolder\Subfolder\Reference\481789.pdf';
SELECT
LEFT(reverse(left(reverse(@t), charindex('\', reverse(@t)) -1)),
charindex('.',reverse(left(reverse(@t), charindex('\', reverse(@t)) -1))) - 1)
(无列名) |
---|
481789 |
DECLARE @t varchar(100) = 'J:\RootFolder\Subfolder\Reference\481789.pdf';
WITH ext AS (
SELECT reverse(left(reverse(@t), charindex('\', reverse(@t)) -1)) as a)
SELECT LEFT(a,charindex('.',a)-1) FROM ext
(无列名) |
---|
481789 |
评论
0赞
whitchurch11
11/18/2023
我将如何更改它,使其指向我需要信息的表?我需要为大约 380 万行执行此操作,而不仅仅是一个字符串。
0赞
nbk
11/18/2023
每个你看到一个@t用列替换它,并添加一个 FROM mytable
评论