Во-первых, позвольте мне заявить, что я прочитал различные подобные посты и не смог выявить сходства между проблемой, с которой столкнулись другие авторы этого сообщения об ошибке, и ситуацией, с которой я столкнулся.Возможно, я не ищу правильно, но вот сценарий.Я пытаюсь найти значения в таблице, которые меньше 70 при преобразовании в числовое значение.Иногда значение может быть сохранено с запятой (т.е. 3080 и т. Д.), Поэтому у меня есть оператор замены, чтобы удалить запятую.Столбец obsValue
в запросах ниже - varchar(2000)
, и я предполагаю, что это как-то связано с этим.Мой первоначальный запрос работал:
Select name, obsValue
From database.dbo.table
Where name in ('LDL')
and isnumeric(obsvalue) = 1
and cast(replace(obsvalue,',','') as decimal(18)) < 70
Это возвращает ожидаемые значения, но это не единственное name
Я пытаюсь найти.Другие примеры включают ('LDL(CALC)')
.Использование оператора UNION
позволит мне объединять запросы, но, к сожалению, я не контролирую код приложения, и это не вариант.Единственный доступный вариант - использование предложения IN
, поэтому в конечном итоге запрос будет выглядеть так, когда я ищу множество значений name
:
Select name, obsValue
From database.dbo.table
Where name in ('LDL', 'LDL(CALC)')
and isnumeric(obsvalue) = 1
and cast(replace(obsvalue,',','') as decimal(18)) < 70
И, к сожалению, делаю это такпуть, где я получаю сообщение об ошибке.Я прошу прощения, если это уже было ответом в другом месте.Пожалуйста, ссылку, и я дам кредит, когда кредит должен.