1

我在 MS Access 查询中创建了 IIf 语句,以填充特定字段中的空空格。该语句只影响部分数据,而不是全部。为什么它只适用于一定比例的记录?

Field:Line_off_Date

Table:Claims

Criteria:IIf(IsNull("Line_off_Date "),"1/1/1900"

这是分隔后的官方Sql:

SELECT Claims.Line_off_Date 
FROM Claims
WHERE (((Claims.Line_off_Date)=IIf("Line_off_Date IsNull",#1/1/1900#,"Line_off_Date ")));

我不能在这个网站上截屏,但我可以给出一个模拟表示:

Line_off_Date

2013 年 12 月 23 日 2013 年 12 月 23 日 2010 年 5 月 16 日 1900 年 1 月 1 日 1900 年 1 月 1 日

2000 年 12 月 10 日 2008 年 11 月 4 日

这被列为一列,在 1/1/1900 和 12/10/2000 之间有一个空格。当我把它贴在这里时,它变成了一个段落。我希望这在某种程度上有所帮助......

4

1 回答 1

2

我不确定您的目标,但这看起来像是您可以使用Nz Function的地方。

Criteria: Nz(Line_off_Date, "1/1/1900")

如果您愿意IIf,请尝试这种方式...

Criteria: IIf(Line_off_Date Is Null, "1/1/1900", Line_off_Date)

请注意,这些建议假设Line_off_Date是文本数据类型。如果它实际上是日期/时间,则使用#而不是引号来分隔值。

Criteria: Nz(Line_off_Date, #1/1/1900#)
Criteria: IIf(Line_off_Date Is Null, #1/1/1900#, Line_off_Date)

WHERE看到你的条款后我更困惑...

WHERE (((Claims.Line_off_Date)=IIf("Line_off_Date IsNull",#1/1/1900#,"Line_off_Date ")));

除了引用等问题,我认为逻辑是错误的。如果您说"show me rows where Line_off_Date= 除了存储在中的内容Line_off_Date",您可能无法取回任何行。

我认为你需要一种不同的方法。如果您需要更多帮助,请向我们展示一组简短的示例数据以及基于这些数据的所需输出。

根据评论讨论,我的理解是您真的不想根据---过滤Line_off_Date结果集,这意味着这不是WHERE子句问题。相反,您想要检索Line_off_Date值,但要替换#1900-1-1#为 Null 的任何值。如果正确,请使用SELECT子句中的字段表达式进行转换。

SELECT Nz(Claims.Line_off_Date, #1900-1-1-#) AS Line_off_Date_adjusted 
FROM Claims;
于 2013-12-23T16:37:06.110 回答