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

时间:2014-05-20 19:24:37

标签: sql sql-server tsql user-defined-functions

我有以下用户定义的函数正确运行;但是,它显示了根据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

由于

1 个答案:

答案 0 :(得分:0)

没有办法通过此函数返回值。 但您可以按Where function_Column is not null

过滤查询