SQL, ГДЕ оператор работает только с некоторыми строками

#sql #vba #ms-access

#sql #vba #ms-доступ

Вопрос:

Я сделал заявление SQL для фильтрации проектов, и у меня возникли проблемы с фильтрацией только активных проектов. Он работает с некоторыми данными, но на несколько строк это не влияет.

Когда я пытаюсь отфильтровать весь активный проект, я использовал a varchar(1) в качестве логического значения true/false 1=завершено 0=активно

SQL:

 SELECT   dbo_tblTrialTest.ID,   dbo_tblTrialTest.PartNumber,   dbo_tblTrialTest.CreationDate,   dbo_tblTrialTest.Init,   dbo_tblTrialTest.CompletionInit,   dbo_tblTrialTest.CustomerName,   dbo_tblTrialTest.CompletionDate,   dbo_tblTrialTest.Description,   dbo_tblTrialTest.ActiveAsString FROM  dbo_tblTrialTest WHERE   (((dbo_tblTrialTest.ActiveAsString) = TRIM("0")))   AND ((dbo_tblTrialTest.ID) LIKE '*' amp; [Forms]![frmTrialTestOverview]![tfFilter] amp; '*')   OR (((dbo_tblTrialTest.PartNumber) LIKE '*' amp; [Forms]![frmTrialTestOverview]![tfFilter] amp; '*'))   OR (((dbo_tblTrialTest.CustomerName) LIKE '*' amp; [Forms]![frmTrialTestOverview]![tfFilter] amp; '*'));  

Вывод из этого запроса:

введите описание изображения здесь

Таким образом, только некоторые строки не зависят от ActiveAsString того, в какие строки вводятся данные? Я действительно не могу понять, почему это так.

Ответ №1:

Обрезать его нет смысла "0" . Может быть, это нужно для поля, однако:

 Trim(dbo_tblTrialTest.ActiveAsString)="0"  

Но используйте битовое поле для значений True/False.

Кроме того, попробуйте эту логику:

 WHERE   dbo_tblTrialTest.ActiveAsString = "0"   AND   (dbo_tblTrialTest.ID LIKE '*' amp; [Forms]![frmTrialTestOverview]![tfFilter] amp; '*'   OR dbo_tblTrialTest.PartNumber LIKE '*' amp; [Forms]![frmTrialTestOverview]![tfFilter] amp; '*'   OR dbo_tblTrialTest.CustomerName LIKE '*' amp; [Forms]![frmTrialTestOverview]![tfFilter] amp; '*');  

Комментарии:

1. Спасибо, чувак, за то, что ты сделал заявление о том, где работаешь. На самом деле это имеет смысл, но я постараюсь немного изменить его, считается ли это лучшей практикой? Я просто погуглил, и некоторые люди сказали, что вы можете использовать varchar/char в качестве оператора true/false.

2. вы можете использовать varchar/char в качестве оператора true/false … вы могли бы, но текст никогда не будет первым выбором для хранения числовых или логических значений.