从用户定义的函数中消除空查询结果

Posted

技术标签:

【中文标题】从用户定义的函数中消除空查询结果【英文标题】:Eliminate Null Query results from a user defined function 【发布时间】:2014-05-20 19:24:37 【问题描述】:

我有以下正确运行的用户定义函数;但是,它会显示所有在检查 ISDATE 条件时返回 0 的记录。这些记录在查询结果中显示为 NULL 值。我不想看到那些记录。如何从查询结果中删除它们?

我必须设置 ISDATE() 检查,因为一些日志条目具有以下格式:

("截止日期:-> xx/xx/xxxx" 而不是 "截止日期:xx/xx/xxxx -> yy/yy/yyyy")

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION ParseValueFromChgLog 
(
    @LogText varchar(max), 
    @ValueNum int -- 1 = original date or 2 = changed to date
)
RETURNS date    
AS
BEGIN
    -- Declare the return variable here
    DECLARE @Result date
    DECLARE @ValueCheck char(1)
    DECLARE @Index bigint
    DECLARE @OrigStep bigint
    DECLARE @StrDate varchar(max)   

        -- Parse "Original Date"
        IF @ValueNum = 1
        BEGIN
            SET @Index = 10
            SET @OrigStep = 8
            SET @StrDate = SUBSTRING(@LogText,CHARINDEX('Due Date', @LogText)+ @Index, @OrigStep)                   
            IF ISDATE(@StrDate) = 1
            BEGIN
                SET @Result = CAST(SUBSTRING(@LogText,CHARINDEX('Due Date', @LogText)+ @Index, @OrigStep)AS DATE)
                --SET @Result = @Date 
            END
        END

        -- Parse "Changed to Date" 
        IF @ValueNum = 2
        BEGIN
            SET @Index = 21
            SET @OrigStep = 9
            SET @StrDate = SUBSTRING(@LogText,CHARINDEX('Due Date', @LogText)+ @Index, @OrigStep)
            IF ISDATE(@StrDate) = 1
            BEGIN
                SET @Result = CAST(SUBSTRING(@LogText,CHARINDEX('Due Date', @LogText)+ @Index, @OrigStep)AS DATE)
                --SET @Result = @Date
            END
        END

    -- Return the result of the function
    RETURN @Result 

END
GO

谢谢

【问题讨论】:

好的,我想通了。在视图 WHERE 子句中,我试图使用返回函数的别名,即。 “WHERE alias IS NOT NULL”而不是使用“user-defined-function IS NOT NULL”。有没有更好的方法来做到这一点,所以我不必运行该函数两次? 【参考方案1】:

这个函数没有办法返回一个值。 但是您可以通过Where function_Column is not null 过滤您的查询

【讨论】:

以上是关于从用户定义的函数中消除空查询结果的主要内容,如果未能解决你的问题,请参考以下文章

未找到结果时如何从 Mongoose Find 查询返回自定义消息而不是空数组

MySQL用户定义函数存储查询结果

如何在sql server用户定义函数中循环查询结果集?

消除链接到查询结果的重复表单条目

为啥从子组件返回时我会从查询结果中获得空指针?

SPARQL 查询返回空结果集