我有一个专栏&#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,这将使这项任务变得更加容易。
答案 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
,但正如我所说,您的数据格式似乎不太理想。