sql 取字符串的值 并加一
发布网友
发布时间:2022-04-08 07:25
我来回答
共3个回答
热心网友
时间:2022-04-08 08:54
不同的有不同方法的额,支持正则就很快,不支持就使用自定义函数实现。
正则方法(Oracle)
SELECT SUBSTR('WIN000018'
,1
,LENGTH('WIN000018') -
LENGTH(REGEXP_REPLACE('WIN000018', '[^0-9]+0+', ''))) ||
TO_CHAR(TO_NUMBER(REGEXP_REPLACE('WIN000018', '[^0-9]', '')) + 1)
FROM DUALCREATE
FUNCTION [dbo].[GET_NUMBER_ADD1](@P VARCHAR(100)) RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @S NVARCHAR(100)
DECLARE @R NVARCHAR(100)
DECLARE @I INT
DECLARE @J INT
SET @I=LEN(@P)
SET @S = @P
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
SET @J= convert(int,@s)+1
set @R=right('00000000'+convert(nvarchar,@j),len(@i))
set @R= left(@p,@i-len(@i))+@R
RETURN @R
END
--select GET_NUMBER_ADD1('WIN000018') from temp
热心网友
时间:2022-04-08 10:12
哪种SQL?不同的有不同方法的额,支持正则就很快,不支持就使用自定义函数实现。
正则方法(Oracle)
SELECT SUBSTR('WIN000018'
,1
,LENGTH('WIN000018') -
LENGTH(REGEXP_REPLACE('WIN000018', '[^0-9]+0+', ''))) ||
TO_CHAR(TO_NUMBER(REGEXP_REPLACE('WIN000018', '[^0-9]', '')) + 1)
FROM DUAL
热心网友
时间:2022-04-08 11:47
这种现实中的业务编号是通过序列实现的,而并非取出来再加1这种操作.追问我就是要这个功能 能不能实现
追答
-- OK,以下脚本完全可以实现的你的业务需求:
CREATE SEQUENCE seq_test
AS [int]
START WITH 18
INCREMENT BY 1
MINVALUE 1
MAXVALUE 2147483647
CACHE 10
GO
create procere sp_test_bllno
@pfix nvarchar(20)
as
begin
declare @seqno nvarchar(10);
declare @bllno nvarchar(50);
set @seqno=cast(next value for seq_test as int);
while(len(@seqno)<6)
begin
set @seqno='0'+@seqno;
end
set @bllno=@pfix+@seqno;
select @bllno ;
end
go
execute sp_test_bllno 'WIN';
execute sp_test_bllno 'WIN';
execute sp_test_bllno 'WIN';
execute sp_test_bllno 'WIN';
execute sp_test_bllno 'WIN';
go