检查字段是否为数字,然后仅对一条语句中的那些字段执行比较?

新手上路,请多包涵

这可能很简单,但我不是 SQL 专家,所以我迷路了。我了解 sql 获取您的查询并按特定顺序执行它,我相信这就是为什么此查询不起作用的原因:

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

大多数 purchar_order_number 字段是数字的,但我们最近引入了字母数字字段。我试图获取的数据是查看“7”是否大于最高数字 purchase_order_number。

Numeric() 函数可以很好地过滤掉字母数字字段,但是进行后续的强制转换比较会引发此错误:

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

我不是在问错误是什么意思,这很明显。我在问是否有一种方法可以在单个查询中完成我想要的,最好是在 where 子句中,因为 ORM 约束。

原文由 ledgeJumper 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 692
2 个回答

这对你有用吗?

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

原文由 fnurglewitz 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用子选择进行选择

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

原文由 ShyJ 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进