2011-12-02 10 views
0

SQL変換ステートメントに関するヘルプが必要です。私はvarchar(15)であるNetQuanity(masterTable)を持っており、私はお金である購入価格(PO TABLE)を持つ別のテーブルを持っています。私は、SQLビューでそれらを乗算しようとするとある私にエラーを与える:あなたのフィールドがVARCHARの場合SQL変換ステートメント

enter image description here

+1

vqar(15) - なぜですか?文字列として全体的な数値を格納する必要はありますか? –

+3

varchar(15)の列にはどのような種類のデータがありますか? 「xyz」?データは数値型に変換可能ですか? –

+0

本当の修正はあなたの構造を修正することです。数学的計算のために使用したい数値データは、varcharフィールドに格納されません。あなたは、意図したとおりにデータを使用する必要があるたびに、高価なコンバージョンを望んでいません。データベースをリファクタリングする時があり、これもその1つです。 – HLGEM

答えて

4

、あなたは前にあなたの操作に適切なデータ型にキャストする必要があります。例えば

CAST(myVarCharField as INT) * myIntField 

ただし、このフィールドを数値データ型にキャストしようとすると数字ではない場合は、同じボートになります。

私はこのSOポストに定義された次のような理由のために、あなたの例ではCONVERTCASTを使用することをお勧めします:

関連:T-SQL Cast versus Convert

2

はたぶんCONVERT機能を使用してみてください? CONVERT(money,NetQuantity)

+0

また、 'varcharcolumn'に、変換を中断する無効な文字が含まれていないことを確認してください。その場合、 'char値をmoneyに変換できません。 char値の構文が正しくありません。 ' – omarello

+2

良い点。そしてそれがしたら - 苦しんで! :) –

+0

+1私は言う:) – omarello

0

まず、データ定義に問題があります。 最初に、マスターテーブルの数値以外のエントリを削除します。

SELECT whatever FROM masterTable WHERE ISNUMERIC(NetQuanity)=1 

次のステップは、これをサブクエリとして計算に含めることです。
このクエリでは、CONVERTまたはCASTを使用して、有効な量子値を整数に変換します。 つまり、

CONVERT(INT, NetQuantity) 
関連する問題