3

SOで検索して検索しましたが、理解できません
各フィールドをFLOATとしてキャストしてみましたが、変換してもそれ以上取得できませんでし
たTHENセクションに記載されている値を返すために、以下のケース句を取得するにはどうすればよいですか?

エラー: メッセージ 8114、レベル 16、状態 5、行 1 データ型 varchar を float に変換中にエラーが発生しました。

エラーになる私のSQLクエリのセクション:

When cust_trendd_w_costsv.terms_code like '%[%]%' and (prod.dbo.BTYS2012.average_days_pay) - (substring(cust_trendd_w_costsv.terms_code,3,2)) <= 5 THEN prod.dbo.cust_trendd_w_costsv.terms_code

average_days_pay = float
terms_code = char

乾杯!

4

3 に答える 3

9

ISNUMERICを使用して、変換できない文字列を処理してみてください。

When cust_trendd_w_costsv.terms_code like '%[%]%' 
and (prod.dbo.BTYS2012.average_days_pay) - 

(case when isnumeric(substring(cust_trendd_w_costsv.terms_code,3,2))=1 
         then cast(substring(cust_trendd_w_costsv.terms_code,3,2) as float)
         else 0
 end)
<= 5 THEN prod.dbo.cust_trendd_w_costsv.terms_code
于 2013-02-19T08:06:15.473 に答える
4

あなたが抱えている問題は、文字を含む文字列を具体的に検索し、%(暗黙的または明示的に) float に変換していることです。

ただし、%記号を含む文字列は、まだ a が含まれている間は float に変換できません%。これもエラーを生成します。

select CONVERT(float,'12.5%')

float に変換したい場合は、%最初に次のように記号を削除する必要があります。

CONVERT(float,REPLACE(terms_code,'%',''))

それをなくすだけです。あなたのterms_codeコラムに、それをつまずかせる可能性のある他のキャラクターがいるかどうかはわかりません.

また、SQL Server は非常に積極的に操作を並べ替えることができるためterms_code%. それがエラーの原因である場合は、この積極的な並べ替えを防ぐ必要があります。集約が含まれていない場合、式は通常、最悪の問題を回避できます。変換を試みる前にCASE、処理したくないすべての文字列が以前の句によって削除されていることを確認してください。WHEN

于 2013-02-19T07:55:03.877 に答える
1

Substring Part が数値を返すことが確実な場合は、substring(....) を Float にキャストできます。

 .....and (prod.dbo.BTYS2012.average_days_pay) - (CAST(substring(cust_trendd_w_costsv.terms_code,3,2)) as float ) <= 5 ....
于 2013-02-19T07:49:11.510 に答える