Другая причина использования конструкции SELECT CASE TRUE - когда ваши операторы case оцениваются как логическое значение. В случае SELECT CASE все случаи должны соответствовать одному типу данных в качестве элемента управления. Если вы смотрите на строковый тип данных, то все операторы case также должны быть строками.
SELECT CASE [string]
CASE "String 1", "String 2"
[do a thing]
CASE "String 3"
[do another thing]
END SELECT
Однако если вы сравниваете частичные строки с помощью оператора LIKE, тогда ваш тип данных дела становится логическим, что не будет соответствовать строковому элементу управления. Следующий код не будет работать:
SELECT CASE [string]
CASE LIKE "*1", "*2"
[do a thing]
CASE LIKE "*3"
[do another thing]
END SELECT
Чтобы использовать подстановочные знаки (и, следовательно, иметь логические результаты для случая), вы должны иметь логическое значение управления, поэтому структура должна быть:
SELECT CASE TRUE
CASE [string] LIKE "*1", "*2"
[do a thing]
CASE [string] LIKE "*3"
[do another thing]
END SELECT
Полагаю, вы могли бы использовать IF ... ELSEIF
IF [string] LIKE "*1" AND [string] LIKE "*2" THEN
[do a thing]
ELSEIF [string] LIKE "*3"
[do another thing]
END IF
Лично я считаю, что SELECT CASE легче использовать и читать, когда имеется более трех вариантов. Я использую IF ... ELSE и IF ... ELSEIF, когда мне нужно оценить два или три различных варианта (>, =, <) или если я проверяю значение для определенного диапазона «допустимых» записей. Если вместо этого запись имеет больше разнообразия, и мне нужно определить, какая из десяти возможностей произошла, SELECT CASE - гораздо более простая конструкция, поскольку она устраняет необходимость в нескольких операторах OR. </p>