修剪仅逗号分隔的数字,而不修剪附加数字的字符

时间:2015-05-19 11:57:39

标签: sql sql-server

我有一个专栏&#39; <InstructorID>&#39;其中可能包含&#34; 79,instr1,inst2,13"等数据。 以下代码为我提供了这样的结果&#34; 791213&#34;

declare @InstructorID varchar(100)
set @InstructorID= (select InstructorID from CourseSession where CourseSessionNum=262)
WHILE PATINDEX('%[^0-9]%', @InstructorID) > 0
BEGIN
    SET @InstructorID = STUFF(@InstructorID, PATINDEX('%[^0-9]%', @InstructorID), 1, '')
END
select @InstructorID 

我需要输出ti就像这样&#34; 79,13&#34; 那些附在人物上的数字不会出现在输出中。

P.S:我只需要使用sql来实现这一点。不幸的是,我无法使用Regex,这将使这项任务变得更加容易。

1 个答案:

答案 0 :(得分:1)

我同意其他人的观点,即您的问题似乎表明您的数据设计存在错误。

但是,接受您无法更改设计,以下内容可让您实现所需目标:

compareNfilesParameters(('a.vcf', 'b.vcf', 'c.vcf'), op3=4)

基本上,这会循环遍历DECLARE @InstructorID VARCHAR(100) DECLARE @Part VARCHAR(100) DECLARE @Pos INT DECLARE @Return VARCHAR(100) SET @InstructorID = '79,instr1,inst2,13' SET @Return = '' -- Continue until InstructorID is empty WHILE (LEN(@InstructorID) > 0) BEGIN -- Get the position of the next comma, and set to the end of InstructorID if there are no more SET @Pos = CHARINDEX(',', @InstructorID) IF (@Pos = 0) SET @Pos = LEN(@InstructorID) -- Get the next part of the text and shorted InstructorID SET @Part = SUBSTRING(@InstructorID, 1, @Pos) SET @InstructorID = RIGHT(@InstructorID, LEN(@InstructorID) - @Pos) -- Check that the part is numeric IF (ISNUMERIC(@Part) = 1) SET @Return = @Return + @Part END -- Trim trailing comma (if any) IF (RIGHT(@Return, 1) = ',') SET @Return = LEFT(@Return, LEN(@Return) - 1) PRINT @Return ,在逗号之间提取部分文本。 如果零件是数字,则将其添加到输出文本。我是@InstructorID文字,但您可以PRINT或者按照您的意愿使用它。

显然,我SELECT的位置,您应该将其更改为SET @InstructorID = xyz声明。

如果愿意,可以将此代码放入SELECT,但正如我所说,您的数据格式似乎不太理想。