Проверить, является ли поле числовым, а затем выполнить сравнение только для этого поля в одном выражении?

Это может быть просто, но я не SQL-свист, поэтому я теряюсь. Я понимаю, что sql берет ваш запрос и выполняет его в определенном порядке, и я считаю, почему этот запрос не работает:

select * from purchaseorders
where IsNumeric(purchase_order_number) = 1
and cast(purchase_order_number as int) >= 7

MOST полей buyer_order_number является числовым, но мы вводим буквенно-цифровые данные в последнее время. Данные, которые я пытаюсь получить, - это увидеть, является ли "7" больше, чем наивысший числовой номер_обязания_документа.

Функция Numeric() отфильтровывает буквенно-цифровые поля в порядке, но выполнение последующего сравнения сравнения вызывает эту ошибку:

Conversion failed when converting the nvarchar value '124-4356AB' to data type int.

Я не спрашиваю, что означает ошибка, это очевидно. Я спрашиваю, есть ли способ выполнить то, что я хочу, в одном запросе, предпочтительно в предложении where из-за ограничений ORM.

Ответ 1

это работает для вас?

select * from purchaseorders
where (case when IsNumeric(purchase_order_number) = 1
       then cast(purchase_order_number as int)
       else 0 end) >= 7

Ответ 2

Вы можете сделать выбор с подзапросом

select * from (
select * from purchaseorders
where IsNumeric(purchase_order_number) = 1) as correct_orders
where cast(purchase_order_number as int) >= 7

Ответ 3

попробуйте следующее:

select * from purchaseorders
where try_cast(purchase_order_number as int) >= 7