我自定議了一個函數 CREATE FUNCTION GetMaxHH (@chh char(13)) RETURNS INT (5) AS BEGIN /*declare @zzhh numeric(5) -set @zzhh=0*/ declare @zzhh1 char(13) select @zzhh1=@chh if patindex('%-%',@chh)>0 begin select @zzhh1=cast(substring(@zzhh1,patindex('%-%',@zzhh1)+1,4) as char(5)) if right(@zzhh1,1)>'9' begin set @zzhh1=rtrim(@zzhh1) set @zzhh1=left(@zzhh1,len(@zzhh1)-1) end end return @zzhh1 END但老提示出錯什么VARCHAR不能轉為INT之類的,我該怎么寫呢?
SQL200 -_-;数字的位置固定的话好说 cast(left(right('RXXX-18P',3),2) as int) 或者 cast(substring('RXXX-18P',6,2) as int) 不固定的话先用PATINDEX('%[0-9]%')找到第一个数字开始的位置 截取字符串,然后再找到PATINDEX('%[^0-9]%') 找到第一个非字符串。
但老提示出錯什么VARCHAR不能轉為INT之類的,我該怎么寫呢? 出错的是这句 if right(@zzhh1,1)>'9' 应该是 > 9
搞定了謝謝SQL200 -_-;
/* 用于得出指定款號的最大出貨號(即'-'之后的數字) */ CREATE FUNCTION GetMaxHH (@cZZHH char(13)) RETURNS INT AS BEGIN DECLARE @cZZHH1 CHAR(13) SET @cZZHH1=RTRIM(@cZZHH) WHILE RIGHT(RTRIM(@cZZHH1),1)>'9' BEGIN SET @cZZHH1=SUBSTRING(@cZZHH1,1,LEN(RTRIM(@cZZHH1))-1) END DECLARE @cZZHH2 INT SELECT @cZZHH2=CAST(substring(@cZZHH1,patindex('%-%',@cZZHH1)+1,4) AS INT) return @cZZHH2 END
CREATE FUNCTION GetMaxHH (@chh char(13))
RETURNS INT (5) AS
BEGIN
/*declare @zzhh numeric(5)
-set @zzhh=0*/
declare @zzhh1 char(13)
select @zzhh1=@chh
if patindex('%-%',@chh)>0
begin
select @zzhh1=cast(substring(@zzhh1,patindex('%-%',@zzhh1)+1,4) as char(5))
if right(@zzhh1,1)>'9'
begin
set @zzhh1=rtrim(@zzhh1)
set @zzhh1=left(@zzhh1,len(@zzhh1)-1)
end
end
return @zzhh1
END但老提示出錯什么VARCHAR不能轉為INT之類的,我該怎么寫呢?
或者 cast(substring('RXXX-18P',6,2) as int)
不固定的话先用PATINDEX('%[0-9]%')找到第一个数字开始的位置 截取字符串,然后再找到PATINDEX('%[^0-9]%') 找到第一个非字符串。
出错的是这句
if right(@zzhh1,1)>'9'
应该是 > 9
/*
用于得出指定款號的最大出貨號(即'-'之后的數字)
*/
CREATE FUNCTION GetMaxHH (@cZZHH char(13))
RETURNS INT AS
BEGIN
DECLARE @cZZHH1 CHAR(13)
SET @cZZHH1=RTRIM(@cZZHH)
WHILE RIGHT(RTRIM(@cZZHH1),1)>'9'
BEGIN
SET @cZZHH1=SUBSTRING(@cZZHH1,1,LEN(RTRIM(@cZZHH1))-1)
END
DECLARE @cZZHH2 INT
SELECT @cZZHH2=CAST(substring(@cZZHH1,patindex('%-%',@cZZHH1)+1,4) AS INT)
return @cZZHH2
END