Wie kann ich einen String in SQL filtern?

Wie kann ich einen String in SQL 2008 filtern?

SELECT FileName=reverse(left(reverse('\\PRODSERVER\D$\EXPORT\Data20160401.txt'), charindex('\',reverse('\\PRODSERVER\D$\EXPORT\Data20160401.txt'), 1) - 1)) 

Über Abfrage gibt der filename zurück, der Data20160401.txt ist.

Ich muss nur den servernamen abrufen, der PRODSERVER ist.

Erstellen Sie eine function, um Ihre characterfolge zu teilen

 CREATE FUNCTION [dbo].[fnSplitString] ( @string NVARCHAR(MAX), @delimiter CHAR(1) ) RETURNS @output TABLE(splitdata NVARCHAR(MAX) ) BEGIN DECLARE @start INT, @end INT SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) WHILE @start < LEN(@string) + 1 BEGIN IF @end = 0 SET @end = LEN(@string) + 1 INSERT INTO @output (splitdata) VALUES(SUBSTRING(@string, @start, @end - @start)) SET @start = @end + 1 SET @end = CHARINDEX(@delimiter, @string, @start) END RETURN END 

Rufen Sie die function auf

 select *from dbo.fnSplitString('\\PRODSERVER\D$\EXPORT\Data20160401.txt','\') 

Ausgabe

 PRODSERVER D$ EXPORT Data20160401.txt 
 DECLARE @path VARCHAR(50) = '\\PRODSERVER\D$\EXPORT\Data20160401.txt' Select SubString(@path,3,(CHARINDEX('\',@path,3)-3)) 

Wenn Sie den Pfad Ihrer file anfangen, beginnt immer mit \\ Sie können so etwas wie:

 Filename=substring(string,0,charindex(substring(string,2,len(string)-2),'\') 

Ich weiß nicht, ob dies die genaue korrekte Syntax ist, da ich nicht auf einer Maschine mit irgendeinem sql processor bin, aber es sollte so etwas tun:

  1. Holen Sie sich den Teilstring Ihrer Saite ohne die führenden \\
  2. Holen Sie sich die Lage der 3. \ so ist, wo der Teil, den Sie nicht brauchen, beginnt
  3. Ergreife den Teilstring aus dem Teilstring, den du in 1 von der ersten Position nach dem \\ bis zur Position des 3. \