2015-05-04 134 views
0

如何過濾SQL 2008中的字符串?如何過濾SQL中的字符串?

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

        charindex('\',reverse('\\PRODSERVER\D$\EXPORT\Data20160401.txt'), 

          1) - 1)) 

上面的查詢返回文件名Data20160401.txt。

我只需要提取PRODSERVER的服務器名稱。

+1

你的文件名總是以\\開頭嗎? –

+0

是的文件名總是以\\ – goofyui

+0

開頭始終是相同的路徑?如果不是的話,你能否給出你期望能夠查詢的路徑變化的例子。 – rhealitycheck

回答

1

創建一個函數來分割你的字符串

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 

調用函數

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

輸出

PRODSERVER 
D$ 
EXPORT 
Data20160401.txt 
+0

如果我只需要PRODSERVER? – goofyui

+0

其實我試圖實現這一塊拆分功能到我現有的選擇查詢..從表 – goofyui

+0

選擇col1,col2,拆分(\\ filepath \)作爲[ServerName]從條例草案得到了答案 – goofyui

1
DECLARE @path VARCHAR(50) = '\\PRODSERVER\D$\EXPORT\Data20160401.txt' 

Select SubString(@path,3,(CHARINDEX('\',@path,3)-3)) 
+0

如果您正在從列表中選擇一個子列,請使用@path –

0

Asuming你的文件的路徑總是以\\開始你可以做一些如:

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

不知道這是否是準確的正確的語法,因爲我不是一個機器上,此刻任何SQL處理器,但它應該做這樣的事情:

  1. 獲取的子您的字符串沒有領先\\
  2. 獲取第三個\的位置,因爲這是您不需要的部分的起始位置
  3. 從位於\\之後的第一個位置創建的子字符串中獲取子字符串,直到位置第3 \
+0

的列名稱。不太正確。 SUBSTRING的第二個參數是在第一個參數中傳遞的字符串中的起始位置。在這種情況下,傳遞字符串作爲第一個和零作爲第二個將始終返回路徑的'\\'部分。此外,SQL Server子字符串不是基於零的。要獲得計數,正確的計數必須從1開始並且包括在內。你的方法看起來更像SELECT SELECT SUBSTRING(SUBSTRING(@ path,3,len(@path)-2),1,CHARINDEX('\',substring(@ path,3,len(@path)-2)) -1)你必須找到兩個子串,所以LEN()是正確的。 –

+0

好吧,謝謝,不知道這些tbh,必須要快,因爲我即將離開工作,我剛回到電腦,我有一個普遍的想法,但沒有時間適當地想出來 –