送几年使用送后的几年直接相乘应该就可以了:
DATEDIFF(day,now,getdate())>365*(3+1)

解决方案 »

  1.   

    这个试试:
    select substring ('999年',1,patindex('%年','999年')-1)
      

  2.   

    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)))
      

  3.   

    --创建一个自定义函数,来处理你的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
      

  4.   

    下列得到年數
    convert(integer,substring(ltrim(nx),1,charindex(ltrim(nx),'年') - 1)) + 
    substring (substring(ltrim(nx),charindex(ltrim(nx),'(') + 1),1,patindex('%年)','999年)')-1)
      

  5.   

    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年')
      

  6.   

    --  以下支持空字符
    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('')
      

  7.   

    函数:
    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年)')