从SQL Server中的字符串中删除任何字符

时间:2014-10-10 10:12:57

标签: sql-server tsql stored-procedures

我试图编写一个存储过程,它会在行上给出下一个值。

在我的情况下,我发送了一个参考号,存储过程使用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

2 个答案:

答案 0 :(得分:0)

如果您使用的是SQLServer,请执行以下操作

enter image description here

其他解决方案正在使用替换功能:

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