如何过滤SQL中的字符串?

问题描述:

如何过滤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

创建一个函数来分割你的字符串

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

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

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

如果您正在从列表中选择一个子列,请使用@path –

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,必须要快,因为我即将离开工作,我刚回到电脑,我有一个普遍的想法,但没有时间适当地想出来 –