0
SELECT logicalTime, traceValue, unitType, entName 
FROM vwSimProjAgentTrace 
WHERE valueType = 10  
AND agentName ='AtisMesafesi' 
AND ( entName = 'Hawk-1') 
AND simName IN ('TipSenaryo1_0') 
AND logicalTime IN (
    SELECT logicalTime 
    FROM vwSimProjAgentTrace 
    WHERE valueType = 10  AND agentName ='AtisIrtifasi' 
    AND ( entName = 'Hawk-1') 
    AND simName IN ('TipSenaryo1_0')  
    AND CONVERT(FLOAT , traceValue) > 123
) ORDER BY simName, logicalTime 

これは私のSQLコマンドで、テーブルはビューテーブルです...「convert(float...) part」を入力するたびに、Msg 8114、Level 16、State 5、Line 1 Error conversion data type nvarchar to float. が表示されます。

このエラー...

4

2 に答える 2

0

1 つ (または複数) の行のtraceValueフィールドに、float に変換できないデータがあります。

ドットとコンマの正しい組み合わせを使用して浮動小数点値を示していることを確認し、そのフィールドに純粋に無効なデータ (テキストなど) が含まれていないことを確認してください。

この SQL を試して無効な行を見つけることができますが、処理できない場合があります。

SELECT * FROM vwSimProjAgentTrace WHERE NOT ISNUMERIC(traceValue)

ISNUMERICのドキュメントはこちらにあります。

于 2013-06-03T12:11:39.230 に答える
0

convert コマンドで BoL (books online)を見ると、float への nvarchar 変換が暗黙的な変換であることがわかります。これは、「float」可能な値のみが float に変換できることを意味します。したがって、すべての数値 (浮動小数点範囲内) を変換できます。非数値は変換できません。これは非常に論理的です。

おそらく、列に数値以外の値が含まれている可能性があります。変換なしでクエリを実行すると、それらが表示される場合があります。コンマとドットのようなものを探します。テスト シナリオでは、ドットの代わりにコンマを使用すると問題が発生しました。

isnumeric の例については、このsqlfiddleを見てください

于 2013-06-03T12:13:12.983 に答える