来自定界字符串字段前半部分的子字符串

Substring from first half of a delimated string field

我在 SQL 服务器的 table 中有一个字段值,其中包含文件的路径,该路径由 - 字符分隔,我想要的是 select 从开始(零索引)到该定界字符最后一次出现的子字符串。

DECLARE @path NVARCHAR(500)        
SELECT @path = 'F:\Fruit Seeds-Category Oil\Quality- Fine Seeds',

我只需要提取子串"F:\Fruit Seeds-Category Oil\Quality"

我的查询

SELECT LEFT(@path, LEN(@path) - CHARINDEX('-',REVERSE(@path)))

最好的方法是什么?

这会找到字符串中“-”的最后一个索引:

DECLARE @path NVARCHAR(500) = 'F:\Fruit Seeds-Category Oil\Quality- Fine Seeds';

DECLARE @i  INT = 1;
DECLARE @ix INT = 0;

WHILE @i > 0
BEGIN
    SET @ix = @i;
    SET @i = CHARINDEX('-', @Path, @i + 1);
END

SELECT LEFT(@path, @ix - 1)

你可以清楚地把它放在一个函数中以供重用。