これが役立つことがあります。
DECLARE @p nvarchar(100) = '**0756FJ89045GJD38**.pdf',
@n int = 3
;WITH cte AS (
SELECT STUFF(REPLACE(SUBSTRING(@p,1,CHARINDEX('.',@p)-1),'*',''),1,0,'/') as p, 1 [level]
UNION ALL
SELECT STUFF(p,[level][email protected],0,'/'), [level][email protected]
FROM CTE
WHERE LEN(STUFF(p,[level][email protected],0,'/')) >= [level][email protected]
)
SELECT TOP 1 @p = '/home/ars'+p +'/'+REPLACE(@p,'*','')
FROM cte
ORDER BY [level] DESC
SELECT @p
出力:
/home/ars/07/56/FJ/89/04/5G/JD/38/0756FJ89045GJD38.pdf
EDIT:
をPDFファイル名とすべての名前を持つテーブルがある場合は、あなたよりも、同じ大きさですこのようにすることができます:
DECLARE @n int = 3
;WITH pdf AS (
SELECT *
FROM (VALUES
('**0756FJ89045GJD38**.pdf'),
('**1729DA8CD189700A**.pdf'),
('**A6710936BCD47832**.pdf'),
('**00A764D617B93978**.pdf')
) as t(file_)
)
,cte AS (
SELECT file_, STUFF(REPLACE(SUBSTRING(file_,1,CHARINDEX('.',file_)-1),'*',''),1,0,'/') as p, 1 [level]
FROM pdf
UNION ALL
SELECT file_, STUFF(p,[level][email protected],0,'/'), [level][email protected]
FROM CTE
WHERE LEN(STUFF(p,[level][email protected],0,'/')) >= [level][email protected]
)
SELECT TOP 1 WITH TIES '/home/ars'+p +'/' + REPLACE(c.file_,'**','')
FROM cte c
ORDER BY ROW_NUMBER() OVER (PARTITION BY file_ ORDER BY [level]) DESC
出力:
/home/ars/00/A7/64/D6/17/B9/39/78/00A764D617B93978.pdf
/home/ars/A6/71/09/36/BC/D4/78/32/A6710936BCD47832.pdf
/home/ars/17/29/DA/8C/D1/89/70/0A/1729DA8CD189700A.pdf
/home/ars/07/56/FJ/89/04/5G/JD/38/0756FJ89045GJD38.pdf
は、固定された文字列の長さですか? –
このリンクで必要な情報をすべて見つけることができると思います。https://msdn.microsoft.com/en-us/library/ms181984.aspx –
変数がありません。 – JER