2012-02-27 22 views
0

私は8桁のTEXTフィールド(Codeと呼ばれます)を持っていて、 "code mod 3が0である"を選択したいと思っています。 このwhere句をms-sqlに書くにはどうすればよいですか?私は、クエリが他のバージョンのSQLでも同じでなければならないと考えています。ありがとう。where句のテキストフィールドで算術演算を行う方法は?

答えて

5

- DONT DO THIS! where句にスカラー計算を置くとSARGableになりません。つまり、索引を使用できず、表スキャンを実行する必要があります。

2番目 - DONT DO THIS!いずれかのコードがINTにキャストできない場合、これは失敗します。第三に

- あなたはまだ2つの警告にもかかわらず、これを実行したい場合は、これはどのようにある:私はOPは私がドン...それはTEXTフィールドだったと言って質問を編集しているかもしれないと思う

-- If field is varchar 
WHERE CAST(Code AS INT) % 3 = 0 

-- If field is TEXT 
WHERE CAST(CAST(Code AS VARCHAR(10)) AS INT) % 3 = 0 
+1

+1は正しい考えです。 CASTは 'TEXT'と' INT'の間では動作しません(OPは文字通りMSSQLの従来の 'TEXT'型を意味すると仮定します)。これを行う必要があります: 'CAST(CAST(VARCHAR(25))AS INT)'。 – vcsjones

+0

これはありがとう、私は彼がvarcharを意味すると思ったが、私は両方の可能性を今追加した。 –

1

ないことがMSSQLに同じだかどうかわからが、MySQLで:まず

SELECT * FROM tbl WHERE Code % 3 = 0; 
+0

」元々そこにあったことを思い出してください。私のソリューションがTEXT列で動作するかどうかは分かりません。 – Travesty3

関連する問題