2014-02-16 3 views
0

Я пытаюсь подключить базу данных Filemaker к Firebird SQL DB в обоих направлениях, импортируя в FM и экспортируя обратно в Firebird DB. Пока он работает с использованием MBS Plug-in, но FM 13 Pro canot обрабатывает NULL.SQL Выберите, чтобы не содержать поля, которые являются NULL

Это означает, что, например, поля Timestamp, которые пусты (NULL), производят значение "0". Thats означает во времени что-то вроде 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")) 

без результата или.

+0

Возможно ли, что значения NULL являются строковыми значениями «NULL»? – DaHoopster

+0

Я использовал редактор БД и его NULL, а не «NULL». Фильтр WHERE работает, но он фильтрует целые записи вместо одного поля, что мне действительно нужно делать. –

+0

Я не уверен, что вы можете игнорировать поле, которое является NULL. Это означает, что разные записи будут иметь разное количество полей. Вы можете использовать COALESCE, чтобы иметь значение по умолчанию, если поле метки времени равно NULL. – pscs

ответ

0

Я не знаю, специальный SQL диалект, но

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

должен помочь вам: value дает первый аргумент, то есть ваше поле, если оно не NULL или второй аргумент, если он есть.

+0

AHH! Я так не думал. Но должен ли я использовать 0 в качестве аргумента NULL? –

+0

Я пробовал это так, но это не помогло: SELECT FIELD1, VALUE (FIELD2, NULL) FROM TABLE. То же самое с 0 –

+0

. Я прошел через руководство Firebird, которое швы, что это не работает. –

2

Это прямой ответ на предложение Halfbit, которое верно, но не для этого диалекта SQL. В запросе для предоставления значения замены, когда поле имеет значение NULL, вам необходимо использовать COALESCE (x, y). Где, если X является нулевым, 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() для более чем двух аргументов, я использовал только два для понятности.

+0

Я думаю, что я понял это правильно, поэтому я использовал выберите FIELD1, coalesce (null, '') как FIELD2 из TABLE. '' означает, что он ничего не вставляет.Но это все еще швы, чтобы вставить что-то, что равно функции NULL в поле Filemaker. Мне нужно пропустить это полностью, чтобы он вообще не менял поле. –

+0

Думаю, я немного смущен. Может ли FIELD1 быть нулевым? Если так вы, вероятно, захотите сделать, выберите COALESCE (field1, '') в качестве поля2 из таблицы –

+0

@ MichaelMüller «пропускает» поле (что невозможно, если вы не исключаете его из выбора), все равно даст нуль в таблице, которую вы вставьте его. «NULL» означает «неизвестно» или значение отсутствует. Вам нужно будет использовать определенное значение замены, если вы не хотите «NULL», и, скорее всего, Filemaker обрабатывает пустую строку и «NULL» как одно и то же значение. –

Смежные вопросы