2012-05-24 215 views
0

我有一組數據,其中包含完整的UNC路徑到目錄。我只想選擇路徑(刪除服務器/ IP)。我怎樣才能做到這一點?選擇部分字符串

數據:

\\nas.home.example.com\dvd\My First Video 
\\nas.office.example.com\business\Report1 
\\nas.office.example.com\business\Report2 
\\10.10.10.10\projects\proj1\images 
\\10.10.10.10\projects\proj1\queries 
\\10.10.10.10\projects\proj1\output 

預期結果(可以帶或不帶龍頭\,我不在乎):

\dvd\My First Video 
\business\Report1 
\business\Report2 
\projects\proj1\images 
\projects\proj1\queries 
\projects\proj1\output 

我試過以下(具體到一個以上輸入):

SELECT RIGHT(('\\nas.home.example.com\dvd\My First Video'), 
    CHARINDEX('\', REVERSE('\\nas.home.example.com\dvd\My First Video'))); 

這隻返回最內層的目錄(My First Video)。我可以添加一個偏移量來獲取父,但它僅適用,如果目錄正是數目的字符:

SELECT RIGHT(('\\nas.home.example.com\dvd\My First Video'), 
    CHARINDEX('\', REVERSE('\\nas.home.example.com\dvd\My First Video'))+4); 

返回\dvd\My First Video,這是很好的 - 對於一個值。我如何修改我的查詢來處理所有數據值?

我懷疑我實際上可能需要這些查詢中的兩個。一個用於與DNS名稱的服務器,在.com和一個IP地址,全部結束,所有開始10.10

回答

1
DECLARE @x TABLE (p VARCHAR(255)) 

INSERT @x SELECT '\\nas.home.example.com\dvd\My First Video' 
UNION ALL SELECT '\\nas.office.example.com\business\Report1' 
UNION ALL SELECT '\\nas.office.example.com\business\Report2' 
UNION ALL SELECT '\\10.10.10.10\projects\proj1\images' 
UNION ALL SELECT '\\10.10.10.10\projects\proj1\queries' 
UNION ALL SELECT '\\10.10.10.10\projects\proj1\output' 
UNION ALL SELECT 'foo.bar\whatever\who'; 

SELECT p, x = SUBSTRING(p, CHARINDEX('\', SUBSTRING(p, 3, 4000)) + 2, 4000) FROM @x; 

結果:如果你要刪除的領先\

p           x 
----------------------------------------- ------------------------ 
\\nas.home.example.com\dvd\My First Video \dvd\My First Video 
\\nas.office.example.com\business\Report1 \business\Report1 
\\nas.office.example.com\business\Report2 \business\Report2 
\\10.10.10.10\projects\proj1\images   \projects\proj1\images 
\\10.10.10.10\projects\proj1\queries  \projects\proj1\queries 
\\10.10.10.10\projects\proj1\output   \projects\proj1\output 
foo.bar\whatever\who      \whatever\who 

,將+ 2更改爲+ 3

0

試試這個(中重要的部分是第三行):

DECLARE @str varchar(100) 
SET @str = '\\nas.home.example.com\dvd\My First Video' 
select substring(@str, CHARINDEX('\', @str, 3), len(@str) - charindex('\', @str, 3)) 

更換@str與列名在SELECT聲明。

這樣做是從第一個索引'\'開始,在第三個字符之後抓取一個字符串的子串,並且在第三個字符之後將字符串總長度的長度減去'\'的第一個索引。

1

相同的概念亞倫,稍有不同的語法

SUBSTRING(p, CHARINDEX('\',p,3), 255)