Получить имя папки из столбца пути в запросе MS SQL

#sql-server #tsql

#sql-сервер #tsql

Вопрос:

как получить имя папки в пути к каталогу в SQL

в настоящее время есть этот запрос для получения имени папки по пути заметил, что переменная @test вернула неверное имя папки, которое = » Q», в котором отсутствует буква A, и когда я попытался добавить в @test2, он получил правильное имя папки, которое является QA я хотел бы получить запрос, который может вместить эти две сцены для @test и @test2, которые вернут QA какие-либо идеи?

 DECLARE @Test VARCHAR(MAX) = '\asda.xxv.wwdatatasTestClientsasdasTestFolderQA'
DECLARE @Test2 VARCHAR(MAX) = '\uxcvs.xcxcv.xcvdatatasTestClientsxcvcxxcvxcvQA'

SELECT RIGHT(SUBSTRING(@Test, 2, LEN(@Test)-2), CHARINDEX('', SUBSTRING(REVERSE(@Test), 2, LEN(REVERSE(@Test))-2), (CHARINDEX('', SUBSTRING(REVERSE(@Test), 2, LEN(REVERSE(@Test))-2))))) AS DiconFilePath , 
RIGHT(SUBSTRING(@Test2, 2, LEN(@Test2)-2), CHARINDEX('', SUBSTRING(REVERSE(@Test2), 2, LEN(REVERSE(@Test2))-2), (CHARINDEX('', SUBSTRING(REVERSE(@Test2), 2, LEN(REVERSE(@Test2))-2))))) AS DiconFilePath2
  

Ответ №1:

Изменение переменной @test или @test2 вернет правильные значения-QA

 select REVERSE(substring( CASE WHEN CHARINDEX ('', REVERSE(@Test))=1 THEN RIGHT(REVERSE(@Test), LEN(@Test) - 1)   ELSE REVERSE(@Test) END,1,
CASE WHEN CHARINDEX ('', REVERSE(@Test))=1 THEN CHARINDEX ('', RIGHT(REVERSE(@Test), LEN(@Test) - 1)) else CHARINDEX ('', REVERSE(@Test)) end
-1))
  

Комментарии:

1. Гораздо более аккуратное решение

Ответ №2:

Вы можете попробовать следующее, возможно, потребуется некоторое тестирование, чтобы убедиться, что работает во всех случаях.

 DECLARE @Test VARCHAR(MAX) = '\asda.xxv.wwdatatasTestClientsasdasTestFolderQA'
DECLARE @Test2 VARCHAR(MAX) = '\uxcvs.xcxcv.xcvdatatasTestClientsxcvcxxcvxcvQA'

SELECT RIGHT(SUBSTRING(@Test, 2, LEN(@Test)-2), CHARINDEX('', SUBSTRING(REVERSE(@Test), 2, LEN(REVERSE(@Test))-2), (CHARINDEX('', SUBSTRING(REVERSE(@Test), 2, LEN(REVERSE(@Test))-2))))) AS DiconFilePath , 
RIGHT(SUBSTRING(@Test2, 2, LEN(@Test2)-2), CHARINDEX('', SUBSTRING(REVERSE(@Test2), 2, LEN(REVERSE(@Test2))-2), (CHARINDEX('', SUBSTRING(REVERSE(@Test2), 2, LEN(REVERSE(@Test2))-2))))) AS DiconFilePath2
-----------------------
,patindex('%%', reverse(@Test))
,patindex('%%', reverse(@Test2))
----------------
,case 
    when patindex('%%', reverse(@Test)) > 1  THEN 
        reverse(LEFT(reverse(@Test), patindex('%%', reverse(@Test)) - 1))
    else
        @Test
end
,
case
    WHEN patindex('%%', reverse(@Test2)) = 1 and len(@Test2) > 1 then
    right(reverse(@Test2),LEN(reverse(@Test2)) - 1)
    ELSE
     @Test2
end
,case
    WHEN patindex('%%', reverse(@Test2)) = 1 and len(@Test2) > 1 then
        reverse(substring(right(reverse(@Test2),LEN(reverse(@Test2)) - 1), 0, patindex('%%', right(reverse(@Test2),LEN(reverse(@Test2)) - 1))))
    ELSE
        @Test2
end