我试图编写一个存储过程,它会在行上给出下一个值。
在我的情况下,我发送了一个参考号,存储过程使用MIN
和>
返回下一个参考号。但是,表中的引用号包括123GF,256ER,25GD等字符,在将Varchar
转换为int
时会出现错误。
在将值与传递值进行比较之前,如何去除任何非数字数字?
这是我目前的程序代码:
CREATE PROCEDURE [dbo].nextprevious
@refId INTEGER,
@Next Bit
AS
BEGIN
SET NOCOUNT ON;
DECLARE @lReturn INTEGER
IF(@Next = 1)
SELECT REF
FROM TABLE
WHERE REF =( select MIN(REF)
FROM TABLE WHERE REF > @refId)
else
SELECT REF
FROM TABLE
WHERE REF =( select MAX(REF)
FROM [REF WHERE REF < @refId)
SELECT @lReturn = @@ROWCOUNT
RETURN @lReturn
END
GO
答案 0 :(得分:0)
如果您使用的是SQLServer,请执行以下操作
其他解决方案正在使用替换功能:
select replace(Ref,'A','') from table --to cut off one char
select replace(replace(Ref,'A',''),'B','') from table --to cut off A and B char
同样适合你的角色
答案 1 :(得分:0)
在表格中创建一个计算列,使用该列进行比较:
ALTER table [tablename] ADD ref_int
as CAST(LEFT(REF, PATINDEX('%[^0-9]%', REF + 'x') - 1) AS INT) PERSISTED