如何在SQL中过滤字符串?
如何在SQL 2008中筛选字符串如何在SQL中过滤字符串?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,如何在SQL 2008中筛选字符串 SELECT FileName=reverse(left(reverse('\\PRODSERVER\D$\EXPORT\Data20160401.txt'), charindex('\',reverse('\\PRODSERVER\D$\EXPORT\Data20160401.txt'), 1) - 1)) 上面的查询返回文件名Data20160401
SELECT FileName=reverse(left(reverse('\\PRODSERVER\D$\EXPORT\Data20160401.txt'),
charindex('\',reverse('\\PRODSERVER\D$\EXPORT\Data20160401.txt'),
1) - 1))
上面的查询返回文件名Data20160401.txt
我只需要获取服务器名PRODSERVER。创建一个函数来拆分字符串
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
输出
PRODSERVER
D$
EXPORT
Data20160401.txt
Asuming文件路径始终以\\开头,您可以执行以下操作:
Filename=substring(string,0,charindex(substring(string,2,len(string)-2),'\')
我不知道这是否是正确的语法,因为我目前不在一台配备任何sql处理器的机器上,但它应该执行以下操作:
您的文件名是否总是以\\开头?是的,文件名总是以\\开头。路径是否总是相同的?如果没有,,您能给出您希望能够查询的路径变化的示例吗。\\servername\c$\logserver\www\W3SVC1\filename.log这是实际文件路径的格式。您可以从\\之后开始获取路径的子字符串,然后使用charindex获取下一个\所在的索引,然后您就知道了您的位置子字符串必须结束如果我只需要PRODSERVER怎么办?实际上,我正在尝试对现有的select查询实现此拆分函数。。从表中选择col1、col2、split(\\filepath)作为[ServerName],如果您是从表中选择@Path的列名中的子项,则从Bill获得答案不太正确。SUBSTRING的第二个参数是第一个参数中传递的字符串的起始位置。在这种情况下,将字符串作为第一个传递,将零作为第二个传递,将始终返回路径的“\\”部分。此外,SQL Server子字符串不是基于零的。要获得计数,正确的计数必须从1开始,并且包含在内。你的方法看起来更像Select Select SUBSTRING(SUBSTRING(@path,3,len(@path)-2),1,CHARINDEX('\',SUBSTRING(@path,3,len(@path)-2))-1)你必须找到两次SUBSTRING,这样len()就正确了。好的,谢谢,我不确定这些tbh,必须快点,因为我正要离开工作,我刚刚回到电脑上,我有一个大致的想法,但没有时间好好想一想
DECLARE @path VARCHAR(50) = '\\PRODSERVER\D$\EXPORT\Data20160401.txt'
Select SubString(@path,3,(CHARINDEX('\',@path,3)-3))
Filename=substring(string,0,charindex(substring(string,2,len(string)-2),'\')