0

私のいくつかの列にはNULL値があります。したがって、他の情報(他の列)がNULL値を取得することはできません。だから私はIsnullを使用します。しかし、次のコードで Isnull() を配置した場所をログに記録しました。

私のコードは

SELECT TOP(10) 'INSERT INTO jobs(Budget) VALUES('+

    CAST(SUBSTRING(CAST(r.Budget AS VARCHAR(50)), 0, PATINDEX('%laks%', r.Budget))*100000

        + SUBSTRING(CAST(r.Budget AS VARCHAR(50)), PATINDEX('%laks%', r.Budget) + 4, 
        patindex('%Thousands%', r.Budget) - PATINDEX('%laks%', r.Budget) - 4)* 1000 AS VARCHAR(50))+')'

FROM requirementsdetailsfororganization r

上記のコードでは、給与を数十万単位で計算しています。Isnull() をどこに置いても、エラーが表示されます。

この問題から抜け出すことを提案してください..

4

2 に答える 2

2

今、これが起こっていると思います

使用したことがあるかもしれませんPATINDEX('%laks%', ISNULL(r.Budget,''))

パターンが見つからない場合はゼロPATINDEX()を返すようになりました。によって返された空の文字列内でパターン ' を検索すると、値ゼロが返され、SUBSTRING() 関数でエラーが発生します。インデックスが範囲外のようなものです。'%laks%ISNULL()

解決策の 1 つは、Budget 列で null 値または空の行を除外することです。したがって、LEN() 関数を追加して、ゼロに等しくないかどうかを確認できます。WHERE以下のクエリに追加された条件を参照してください。

SELECT TOP(10) 'INSERT INTO jobs(Budget) VALUES('+

    CAST(SUBSTRING(CAST(r.Budget AS VARCHAR(50)), 0, PATINDEX('%laks%', r.Budget))*100000

        + SUBSTRING(CAST(r.Budget AS VARCHAR(50)), PATINDEX('%laks%', r.Budget) + 4, 
        patindex('%Thousands%', r.Budget) - PATINDEX('%laks%', r.Budget) - 4)* 1000 AS VARCHAR(50))+')'

FROM requirementsdetailsfororganization r
where len(r.Budget)<>0


Budget 列に NULL を持つ値の場合、ゼロなどのデフォルト値を挿入できます

于 2013-04-18T05:54:50.750 に答える
1

null 値を文字列で使用できるものに変えるには、次のように使用します。

... + isnull( expression, 'null') + ...

の値expressionが null の場合nullは、クエリで使用する代わりに文字列を取得します。

また、クエリの値で乗算を行うには、最初にそれらを数値にキャストする必要があります。

于 2013-04-18T05:46:58.343 に答える