2

「メモ」という名前の nvarchar フィールドを持つテーブルを作成しました。このフィールドには、検索に役立つように、必要なもの (数値またはテキスト) を入力できます。

例えば

Table "Customer"
ID  Name  Notes
1   AAA   1234
2   BBB   1235
3   CCC   1236
4   DDD   ABCD

このデータから、1200 から 1300 の間だけの Notes の SQL クエリを書きたいと思いますが、このフィールドにはテキスト値も含まれているため、これを行うことはできません。

私はこれを試しました

SELECT * 
FROM Customer
WHERE ISNUMERIC(Notes) = 1 AND Notes > 1200 AND Notes < 1300

エラー: nvarchar 値を int に変換するときに変換に失敗しました

それから私はこれを試しましたが、それはうまくいくと思いますが、同じエラーが表示されます

SELECT *
FROM
 (SELECT *
  FROM Customers
  WHERE ISNUMERIC(Notes) = 1 
 ) A
WHERE A.Notes > 1200 AND A.Notes < 1300

誰か助けてくれませんか?どうもありがとう

4

1 に答える 1

1

これを試して:

SELECT * 
FROM Customer
WHERE (case when ISNUMERIC(Notes) = 1 then cast(Notes as float) end) > 1200 AND
      (case when ISNUMERIC(Notes) = 1 then cast(Notes as float) end) < 1300

caseこの場合、 が評価の順序を保証するため、これが機能します。サブクエリでこれを書くこともできます:

select *
from (select c.*,
             (case when ISNUMERIC(Notes) = 1 then cast(Notes as float) end) as NotesNum
      from Customer c
     ) c
where NotesNum > 1200 and NotesNum < 1300;

または、これはあなたが望むものに近づくかもしれません:

SELECT * 
FROM Customer
WHERE ISNUMERIC(Notes) = 1 AND
      Notes > '1200' AND Notes < '1300' and len(notes) = 4 and notes not like '%.%'
于 2014-01-28T01:57:29.093 に答える