当前位置: 首页 > 知识库问答 >
问题:

需要if语句来检查空UDF SQL server

后星河
2023-03-14

我有一个函数来获取服务长度,我需要执行一个if语句来检查空日期,我是否能够使用术语if@dateleftorg=='1900-01-01 00:00:00.000'我需要做的是,如果@dateleftorg为空,则使用GETDATE(),否则我使用@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

共有1个答案

王凌
2023-03-14

您可以使用IsNull或coalesce。像这样:

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
 类似资料:
  • 有可能做如下事情吗: 或者: 我知道用很多if-else语句也可以实现同样的目标,但如果它像上面那样工作,看起来会更干净。

  • 我在验证函数中有两个字符串变量,它应该确保变量不会同时为null或空(不允许一个为null,另一个等于空)。 当前的IF语句非常复杂,因为我必须检查: 如果两者都为空 它是功能性的,但丑陋,不是“最佳实践”。如何简化?

  • 问题内容: 是否需要进行显式的if(log.isDebugEnabled()){…}检查? 我的意思是,我已经看到一些帖子提到log.debug(“something”)进行隐式调用,以查看调试模式日志记录是否已启用,然后再进行日志记录。我是否缺少某些东西,或者在使用此步骤之前有中间步骤要执行? 谢谢! 与 编辑:在上面写过:http : //java.sg/whether-to-do-a-isd

  • 我正在练习Python,我想写一个程序来检查当前时间,看看它是否与2:12 pm匹配,并说:所以首先我想要使用模块,但我不知道如何使用? 我的问题是我不知道如何使用时间模块。或者我用的语法对不对? 我的代码:

  • 问题内容: 我需要一个Java API来解析SQL语句。 例如,我有一个SQL查询 我需要检索表名称“ Products”和列名称为“ Prog_ID”等。 如果可能,请提供指向教程或代码段的任何链接。 问题答案: 最终使用了http://zql.sourceforge.net/中的ZQL解析库。 如果您有简单的查询,那应该很容易做

  • 我所说的“空if语句”是指这样的东西(注意分号): 我在考虑这个应用程序时遇到了麻烦。使用time循环,您可以这样做: 但对于if语句没有这样的应用。此外,Java编译器在遇到此类语句时不会发出错误或警告。这可能会导致大而无声的问题,尤其是对于冗长而复杂的语句: 我的问题是:为什么Java中允许这样做?更重要的是,我是否可以启用一个选项,以便在发生这种情况时引发警告? (之前有人问过关于C#的这个