SQL Server:使用されているWHERE条件に応じて、データ型nvarcharを数値に変換中にエラーが発生しました

ジェイス

NVARCHARID列とNVARCHAR10進値のみを持つ別の2つの列を持つテーブルで作業していますが、スキーマを自由に変更することはできません。

を使用してCAST(FIELD AS DECIMAL(18,6))、単一のIDをクエリするデータに対して必要な計算を実行できますが、2つのIDをクエリすると変換エラーが発生します。

'TEST1'と 'TEST2'の2つのIDを考えてみましょう。以下は、正常に機能します。

SELECT ID, CAST(FIELD AS DECIMAL(18,6)) AS FOO 
FROM MY_TABLE 
WHERE ID = 'TEST1'

これも問題なく動作します

SELECT ID, CAST(FIELD AS DECIMAL(18,6)) AS FOO 
FROM MY_TABLE 
WHERE ID = 'TEST2'

ただし、これによりエラーが発生します

データ型nvarcharを数値に変換中にエラーが発生しました

SELECT ID, CAST(FIELD AS DECIMAL(18,6)) AS FOO 
FROM MY_TABLE 
WHERE ID = 'TEST1' OR ID = 'TEST2'

これをどのように処理すればよいですか?

ゴードン・リノフ

違いは実行パスです。最初の2つのクエリに基づいて、以下は有効な結果セットを返すはずです。

SELECT ID, CAST(FIELD AS DECIMAL(18,6)) AS FOO
FROM MY_TABLE
WHERE ID = 'TEST1' OR ID = 'TEST2';

残念ながら、何が起こっていることは、SQL Serverは、全表スキャンを実行することを決定していることであるプッシュcast()近いデータへ。またはFIELD以外の値が問題を引き起こしています。'TEST1''TEST2'

これはバグだと思います。私の意見に関係なく、SQL Server2012 +には簡単な修正があります。

SELECT ID, TRY_CAST(FIELD AS DECIMAL(18, 6)) AS FOO
FROM MY_TABLE
WHERE ID = 'TEST1' OR ID = 'TEST2';

SQL Server 2008(まもなくサポートされなくなります)では、次のCASEを使用できます

SELECT ID,
       (CASE WHEN FIELD NOT LIKE '%[^0-9.]%' AND
                  FIELD NOT LIKE '%.%.%'
             THEN CAST(FIELD AS DECIMAL(18, 6))
        END) AS FOO
FROM MY_TABLE
WHERE ID = 'TEST1' OR ID = 'TEST2';

失敗する代わりに、これはを返しますがNULL、これは単に無視されます。また、のID IN ('TEST1', 'TEST2')代わりにを使用する必要がありますORが、それはあなたの質問とは無関係です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

TOP 一覧

  1. 1

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    Ansibleで複数行のシェルスクリプトを実行する方法

  4. 4

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  5. 5

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  6. 6

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  7. 7

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  8. 8

    Chromeウェブアプリのウェブビューの高さの問題

  9. 9

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  10. 10

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  11. 11

    Reactでclsxを使用する方法

  12. 12

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  13. 13

    MLでのデータ前処理の背後にある直感

  14. 14

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  15. 15

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  16. 16

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  17. 17

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

  18. 18

    テキストフィールドの値に基づいて UIslider を移動します

  19. 19

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  20. 20

    PowerShellの分割ファイルへのヘッダーの追加

  21. 21

    ソートされた検索、ターゲット値未満の数をカウント

ホットタグ

アーカイブ