Dies kann helfen:
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
Ausgang:
/home/ars/07/56/FJ/89/04/5G/JD/38/0756FJ89045GJD38.pdf
EDIT:
Wenn eine Tabelle dort mit PDF-Dateinamen und alle Namen sind gleich groß, als Sie kann dies tun:
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
Ausgang:
/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
wird die Länge der Zeichenfolge festgelegt? –
Ich denke, dass Sie alle Informationen finden Sie unter diesem Link finden können: https://msdn.microsoft.com/en-us/library/ms181984.aspx –
nein seine Variable, danke – JER