SQL选择以保留NULL的字段

时间:2014-02-16 21:33:55

标签: sql firebird filemaker

我正在尝试将Filemaker DB连接到Firebird SQL DB两种方式导入到FM并导出回Firebird DB。 到目前为止,它使用MBS插件,但FM 13 Pro canot处理NULL

这意味着例如空(NULL)的Timestamp字段产生"0"值。 多数民众赞成在时间上像01.01.1889 00:00:00

所以我的想法是简单地忽略包含NULL的字段。

但在这里,我可怜的知识停止了。

首先我认为我可以使用WHERE执行此操作,但这忽略了整个记录集:

SELECT * FROM TABLE WHERE FIELD IS NOT NULL

我也试着稍后过滤它:

If (IsEmpty (MBS("SQL.GetFieldAsDateTime"; $command; "FIELD")  ) = 0 ; MBS("SQL.GetFieldAsDateTime"; $command; "FIELD"))

没有结果。

2 个答案:

答案 0 :(得分:2)

这是对halfbit建议的直接回答,这是正确的但不适用于这种SQL方言。在字段为NULL时提供替换值的查询中,您需要使用COALESCE(x,y)。如果X为null,则使用Y,如果Y为null,则该字段为NULL。这就是为什么我常常像COALESCE(table.field,'')那样使用它,这样如果table.field恰好为NULL,则总是输出一个常量。

select COALESCE(null,'Hello') as stackoverflow from rdb$database

http://www.firebirdsql.org/refdocs/langrefupd15-coalesce.html

您可以将COALESCE()用于两个以上的参数,我只使用了两个用于简洁。

答案 1 :(得分:0)

我不知道特殊的SQL方言,但是

SELECT field1, field2, value(field, 0), ...FROM TABLE 

应该帮助你: value给出第一个参数,即,如果它是NOT NULL则为您的字段,如果是,则为第二个参数。