如何过滤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的服务器名称。
创建一个函数来分割你的字符串
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
DECLARE @path VARCHAR(50) = '\\PRODSERVER\D$\EXPORT\Data20160401.txt'
Select SubString(@path,3,(CHARINDEX('\',@path,3)-3))
如果您正在从列表中选择一个子列,请使用@path –
Asuming你的文件的路径总是以\\开始你可以做一些如:
Filename=substring(string,0,charindex(substring(string,2,len(string)-2),'\')
不知道这是否是准确的正确的语法,因为我不是一个机器上,此刻任何SQL处理器,但它应该做这样的事情:
- 获取的子您的字符串没有领先\\
- 获取第三个\的位置,因为这是您不需要的部分的起始位置
- 从位于\\之后的第一个位置创建的子字符串中获取子字符串,直到位置第3 \
的列名称。不太正确。 SUBSTRING的第二个参数是在第一个参数中传递的字符串中的起始位置。在这种情况下,传递字符串作为第一个和零作为第二个将始终返回路径的'\\'部分。此外,SQL Server子字符串不是基于零的。要获得计数,正确的计数必须从1开始并且包括在内。你的方法看起来更像SELECT SELECT SUBSTRING(SUBSTRING(@ path,3,len(@path)-2),1,CHARINDEX('\',substring(@ path,3,len(@path)-2)) -1)你必须找到两个子串,所以LEN()是正确的。 –
好吧,谢谢,不知道这些tbh,必须要快,因为我即将离开工作,我刚回到电脑,我有一个普遍的想法,但没有时间适当地想出来 –
你的文件名总是以\\开头吗? –
是的文件名总是以\\ – goofyui
开头始终是相同的路径?如果不是的话,你能否给出你期望能够查询的路径变化的例子。 – rhealitycheck