2016-05-02 7 views
1

das ist mein Problem:SQL Aufteilen und Zusammenführen String

ich eine Zeichenfolge aus einer Spalte wie diese bekommen:

**0756FJ89045GJD38**.pdf 

Jetzt muss ich durch diese Zeichenfolge einen Pfad erzeugen:

/home/ars/07/56/FJ/89/04/5G/JD/38/0756FJ89045GJD38.pdf 

Ich muss zwei Zeichen nehmen und es bis zu einer Pfad-Ebene von links nach rechts aufbauen.

Vielleicht können Sie mir helfen, danke!

+0

wird die Länge der Zeichenfolge festgelegt? –

+0

Ich denke, dass Sie alle Informationen finden Sie unter diesem Link finden können: https://msdn.microsoft.com/en-us/library/ms181984.aspx –

+0

nein seine Variable, danke – JER

Antwort

2

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 
+0

ich werde es heute versuchen und eine Rückmeldung geben;) – JER

Verwandte Themen