declare @aa varchar(100) set @aa='5年(送2年)' select convert(int,left(@aa,charindex('年',@aa)-1))+convert(int,substring(@aa,charindex('送',@aa)+1,len(@aa)-charindex('年)',@aa)))
--创建一个自定义函数,来处理你的nx字段就行了:create function f_getyear(@nx varchar(20)) returns int as begin declare @re int,@i int set @i=charindex('年',@nx) if @i>0 begin select @re=cast(left(@nx,@i-1) as int) ,@i=patindex('%送%年%',@nx) if @i>0 select @nx=substring(@nx,@i+1,20) ,@re=@re+ cast(left(@nx,charindex('年',@nx)-1) as int) end else set @re=0 return(@re) end go
CREATE FUNCTION f_nX(@nX VARCHAR(20)) RETURNS INT AS BEGIN DECLARE @i INT -- SET @nX = '10年(送5年)' SET @nX = REPLACE(REPLACE(@nX,'年)',''),'年)','') SELECT @i = CAST(SUBSTRING(@nX,1,CHARINDEX('年',@nX) - 1) AS INT) + CASE WHEN CHARINDEX('送',@nX) > 0 THEN CAST(SUBSTRING(@nX,CHARINDEX('送',@nX) + 1,2000) AS INT) ELSE 0 END RETURN @i END-- 调用 SELECT dbo.f_nX('3年(送1年)') SELECT dbo.f_nX('5年(送2年)') SELECT dbo.f_nX('10年(送5年)') SELECT dbo.f_nX('5年(送2年)') SELECT dbo.f_nX('12年')
-- 以下支持空字符 DROP FUNCTION f_nX GOCREATE FUNCTION f_nX(@nX VARCHAR(20)) RETURNS INT AS BEGIN IF @nX = null OR @nX = '' RETURN 0 DECLARE @i INT -- SET @nX = '10年(送5年)' SET @nX = REPLACE(REPLACE(@nX,'年)',''),'年)','') SELECT @i = CAST(SUBSTRING(@nX,1,CHARINDEX('年',@nX) - 1) AS INT) + CASE WHEN CHARINDEX('送',@nX) > 0 THEN CAST(SUBSTRING(@nX,CHARINDEX('送',@nX) + 1,2000) AS INT) ELSE 0 END RETURN @i END GO-- 调用 SELECT dbo.f_nX('3年(送1年)') SELECT dbo.f_nX('5年(送2年)') SELECT dbo.f_nX('10年(送5年)') SELECT dbo.f_nX('5年(送2年)') SELECT dbo.f_nX('')
函数: CREATE FUNCTION dbo.getYear(@strField varchar(100)) RETURNS int AS Declare @result int Set @strField=ltrim(rtrim(@strField)) if @strField = '' select @result = '' else begin if charindex('送',@strField)>0 select @result = convert(int,left(@strField,charindex('年',@strField)-1))+convert(int,substring(@strField,charindex('送',@strField)+1,len(@strField)-charindex('年)',@strField))) else select @result = convert(int,left(@strField,charindex('年',@strField)-1)) end return @result--调用时使用: select dbo.getYear('5年(送2年)')
select substring ('999年',1,patindex('%年','999年')-1)
set @aa='5年(送2年)'
select convert(int,left(@aa,charindex('年',@aa)-1))+convert(int,substring(@aa,charindex('送',@aa)+1,len(@aa)-charindex('年)',@aa)))
returns int
as
begin
declare @re int,@i int
set @i=charindex('年',@nx)
if @i>0
begin
select @re=cast(left(@nx,@i-1) as int)
,@i=patindex('%送%年%',@nx)
if @i>0
select @nx=substring(@nx,@i+1,20)
,@re=@re+
cast(left(@nx,charindex('年',@nx)-1) as int)
end
else
set @re=0
return(@re)
end
go
convert(integer,substring(ltrim(nx),1,charindex(ltrim(nx),'年') - 1)) +
substring (substring(ltrim(nx),charindex(ltrim(nx),'(') + 1),1,patindex('%年)','999年)')-1)
RETURNS INT
AS
BEGIN
DECLARE @i INT
-- SET @nX = '10年(送5年)'
SET @nX = REPLACE(REPLACE(@nX,'年)',''),'年)','')
SELECT @i =
CAST(SUBSTRING(@nX,1,CHARINDEX('年',@nX) - 1) AS INT)
+
CASE WHEN CHARINDEX('送',@nX) > 0 THEN CAST(SUBSTRING(@nX,CHARINDEX('送',@nX) + 1,2000) AS INT)
ELSE 0 END
RETURN @i
END-- 调用
SELECT dbo.f_nX('3年(送1年)')
SELECT dbo.f_nX('5年(送2年)')
SELECT dbo.f_nX('10年(送5年)')
SELECT dbo.f_nX('5年(送2年)')
SELECT dbo.f_nX('12年')
DROP FUNCTION f_nX
GOCREATE FUNCTION f_nX(@nX VARCHAR(20))
RETURNS INT
AS
BEGIN
IF @nX = null OR @nX = ''
RETURN 0
DECLARE @i INT
-- SET @nX = '10年(送5年)'
SET @nX = REPLACE(REPLACE(@nX,'年)',''),'年)','')
SELECT @i =
CAST(SUBSTRING(@nX,1,CHARINDEX('年',@nX) - 1) AS INT)
+
CASE WHEN CHARINDEX('送',@nX) > 0 THEN CAST(SUBSTRING(@nX,CHARINDEX('送',@nX) + 1,2000) AS INT)
ELSE 0 END
RETURN @i
END
GO-- 调用
SELECT dbo.f_nX('3年(送1年)')
SELECT dbo.f_nX('5年(送2年)')
SELECT dbo.f_nX('10年(送5年)')
SELECT dbo.f_nX('5年(送2年)')
SELECT dbo.f_nX('')
CREATE FUNCTION dbo.getYear(@strField varchar(100))
RETURNS int
AS
Declare @result int
Set @strField=ltrim(rtrim(@strField))
if @strField = ''
select @result = ''
else
begin
if charindex('送',@strField)>0
select @result = convert(int,left(@strField,charindex('年',@strField)-1))+convert(int,substring(@strField,charindex('送',@strField)+1,len(@strField)-charindex('年)',@strField)))
else
select @result = convert(int,left(@strField,charindex('年',@strField)-1))
end
return @result--调用时使用:
select dbo.getYear('5年(送2年)')