Как я сказал в комментарии, я разделяю озадачение оригинального спрашивающего по этому выражению:
WHERE Left(SomeField,3)=IIf(SomeParameter="GYM",Mid(SomeField,2,1)<>'0')
Давайте распакуем это:
Если SomeParameter = "GYM", вернуть это:
Mid(SomeField,2,1)<>'0'
Это проверка второго символа в SomeField на соответствие строке «0», так что это означает, что имеется плохо спроектированное поле, в котором второй символ в этом поле имеет независимое значение. Это вернет true для всех значений, где 2-й символ не равен 0.
Что бы он ни возвращал (True или Null в случае False), он будет сравниваться с этой строкой:
Left(SomeField,3)
Если первые три символа SomeField оказываются «Да», то это вполне может привести к истинному сравнению, поскольку в Access / Jet / ACE значения «Да» и «Истина» и «-1» эквивалентны, а строковые представления могут быть неявно принуждают.
Итак, это может вернуть строки, которые выглядят так:
SomeParameter SomeField
GYM Yes sir, that's my baby
Однако, это действительно не имеет большого смысла, так как тест SomeField является круглым. То есть вы сравниваете первые 3 символа поля в случае, когда истинное сравнение может произойти только тогда, когда первые три символа имеют значение «Да», но вы, в свою очередь, сравниваете эти первые три символа с тестом. для того, является ли 2-й символ в том же поле <> 0. Во всех случаях, когда первые три символа "Да", тогда второй символ определенно не будет "0", так что вам действительно нужно только проверить значение первого три символа.
Я голосую за некомпетентность со стороны первоначального разработчика.