16

これは簡単かもしれませんが、私は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.

私はエラーが何を意味するのか尋ねていません、それは明らかです。単一のクエリで、できればORMの制約があるため、where句で目的を達成する方法があるかどうかを尋ねています。

4

3 に答える 3

31

これはあなたのために働きますか?

select * from purchaseorders
where (case when IsNumeric(purchase_order_number) = 1
       then cast(purchase_order_number as int)
       else 0 end) >= 7
于 2012-11-16T16:45:58.797 に答える
1

副選択で選択を行うことができます

select * from (
select * from purchaseorders
where IsNumeric(purchase_order_number) = 1) as correct_orders
where cast(purchase_order_number as int) >= 7
于 2012-11-16T16:30:05.783 に答える
1

これを試して:

select * from purchaseorders
where try_cast(purchase_order_number as int) >= 7
于 2017-02-15T16:26:34.887 に答える