IIf语句仅操作字段中的部分数据

时间:2013-12-23 16:32:01

标签: sql ms-access ms-access-2010 iif

我在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日 1/1/1900 1/1/1900

2000年12月10日 11/4/2008

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

1 个答案:

答案 0 :(得分: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 ")));

除了引用等问题,我认为逻辑是错误的。如果您说“向我显示Line_off_Date =除Line_off_Date 中存储的内容之外的行,则可能无法获得任何行。

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

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

SELECT