Interbase: ошибка преобразования из строки "" - PullRequest
1 голос
/ 15 января 2010

Я использую IB2009 и пытаюсь подсчитать количество записей, в которых конкретное поле не является ни пустым, ни пустым:

SELECT COUNT(A.ID) FROM MYVIEW A
WHERE ((A.VARCHARFIELD1 IS NOT NULL) OR (A.VARCHARFIELD1 <> ''))

где MYVIEW - это VIEW, а MYVIEW.ID - это INTEGER, а MYVIEW.VARCHARFIELD1 - это VARCHAR (18).

Я получаю сообщение об ошибке

Ошибка в строке 1, ошибка преобразования из строки ""

что я не очень понимаю, так как, когда я отбрасываю функцию COUNT (), запрос выполняется хорошо. Кто-нибудь знает, что я делаю не так? Спасибо!

1 Ответ

1 голос
/ 15 января 2010

Я не вижу ничего плохого в использовании COUNT () в этом случае. Хотя это не имеет значения, вы можете попробовать убрать все скобки в предложении WHERE. Вы также можете попробовать использовать COUNT (*) вместо COUNT (A.ID), просто чтобы посмотреть, дает ли он другие результаты.

В любом случае, исходя из вашего описания цели запроса, я не думаю, что запрос будет выполнять то, что вы хотели. Если запрос должен возвращать строки, где поле не является ни пустым, ни пустым, я считаю, что ваше предложение WHERE должно быть

WHERE A.VARCHARFIELD1 IS NOT NULL AND
      A.VARCHARFIELD1 <> ''

С 'ИЛИ' там, как было написано изначально, я думаю, что вы вернетесь к каждой строке в таблице, где A.VARCHARFIELD1 НЕ НЕДЕЙСТВИТЕЛЕН, так как предикат "field NOT NULL" будет разрешен во всех значениях, отличных от NULL, и поскольку два предиката объединены с помощью ИЛИ, второй предикат не имеет значения.

Надеюсь, это поможет.

...