Domanda

I have a function to get length of service I need to do a if statement to check on blank dates am i able to use the term if @DateLeftOrg == '1900-01-01 00:00:00.000' what i need to do is if @DateLeftOrg is null to use GETDATE() otherwise I use the value from @DateLeftoRG

ALTER FUNCTION [dbo].[hmsGetLosText]
    (@FromDt as datetime,@DateLeftOrg as Datetime) 
returns varchar(255)
as
BEGIN
    DECLARE @yy AS SMALLINT, @mm AS INT, @dd AS INT,
            @getmm as INT, @getdd as INT, @Fvalue varchar(255)


    SET @yy = DATEDIFF(yy, @FromDt, GETDATE())
    SET @mm = DATEDIFF(mm, @FromDt, GETDATE())
    SET @dd = DATEDIFF(dd, @FromDt, GETDATE())
    SET @getmm = ABS(DATEDIFF(mm, DATEADD(yy, @yy, @FromDt), GETDATE()))
    SET @getdd = ABS(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, @yy, @FromDt), GETDATE()), DATEADD(yy, @yy, @FromDt)), GETDATE()))
    IF @getmm = 1
    set @getmm=0

    RETURN (
      Convert(varchar(10),@yy) + 'y ' + Convert(varchar(10),@getmm) + 'm ')
END
È stato utile?

Soluzione

You can use IsNull or Coalesce. Like this:

ALTER FUNCTION [dbo].[hmsGetLosText]
   (@FromDt as datetime,@DateLeftOrg as Datetime) 
returns varchar(255)
AS
BEGIN
    DECLARE @yy AS SMALLINT, @mm AS INT, @dd AS INT,
        @getmm as INT, @getdd as INT, @Fvalue varchar(255)

    --if @DateLeftOrg is null, use GetDate
    SET @DateLeftOrg = CASE WHEN @DateLeftOrg IS NULL THEN GetDate()
       WHEN @DateLeftOrg = '1/1/1900' THEN GetDate()
       ELSE @DateLeftOrg
       END

    SET @yy = DATEDIFF(yy, @FromDt, @DateLeftOrg)
    SET @mm = DATEDIFF(mm, @FromDt, @DateLeftOrg)
    SET @dd = DATEDIFF(dd, @FromDt, @DateLeftOrg)
    SET @getmm = ABS(DATEDIFF(mm, DATEADD(yy, @yy, @FromDt), @DateLeftOrg))
    SET @getdd = ABS(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, @yy, @FromDt), @DateLeftOrg)), DATEADD(yy, @yy, @FromDt)), @DateLeftOrg))
    IF @getmm = 1
       set @getmm=0

    RETURN (
      Convert(varchar(10),@yy) + 'y ' + Convert(varchar(10),@getmm) + 'm ')
END
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top