从用户定义的函数中消除空查询结果
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
过滤您的查询
【讨论】:
以上是关于从用户定义的函数中消除空查询结果的主要内容,如果未能解决你的问题,请参考以下文章