1

次のLOG()クエリでは関数が機能していません。方程式をfloatに変換してみました。それでも、それはエラーを投げています:

無効な浮動小数点演算が発生しました

誰かがこれを手伝ってくれますか?

SELECT 
    t1.[ID], 
    SUM(1 / LOG(t1.[AttrCount] / t2.clustersize AS Float)) AS 'uu'
FROM 
    [Testing].[dbo].[entropytemp5] t1, [Testing].[dbo].[entropyclustersize] t2 
GROUP BY 
    t1.ID

Attrcountおよびの値は次のClustersizeとおりです。

AttrCount | Clustersize  
------------------------
    1            1  
    1            2  
    1            1  
    1            1   
    2            1  
    2            1  
    3            3

ご不明な点がございましたらお知らせください。

ありがとう

4

2 に答える 2

2

これInvalid floating point operationは、ゼロ以下の値でLOG()を呼び出すことによって発生します。

以下に示す行からエラーが発生している可能性があります。

AttrCount | Clustersize  
------------------------
    1            1  
    1            2    <-- this one
    1            1  
    1            1   
    2            1  
    2            1  
    3            3

私が試しLOG(1/2)たところ、Invalid floating point operationSQL Serverが1/2をINTとして扱い、ゼロを返したため、LOG(0)==>無効な浮動小数点演算が発生しました。

これを行っても、エラーが発生します。

1 / LOG(CAST(t1.[AttrCount] / t2.clustersize AS FLOAT))

これは、SQL Serverが1/2を計算し、ゼロを取得してから、それをfloatにキャストするためです。

代わりに、両方のオペランドを別々にキャストしてください。私はこれを試しました、そしてそれは働きます:

1 / LOG(CAST(t1.[AttrCount] AS FLOAT) / CAST(t2.clustersize AS FLOAT))

したがって、クエリ全体は次のようになります。

SELECT 
    t1.[ID], 
    SUM(1 / LOG(CAST(t1.[AttrCount] AS FLOAT) / CAST(t2.clustersize AS Float)) AS 'uu'
FROM 
    [Testing].[dbo].[entropytemp5] t1, [Testing].[dbo].[entropyclustersize] t2 
GROUP BY 
    t1.ID

...ゼロ除算についての元の投稿のビットに戻ります:)

すでに述べたように、クエリのこの部分でゼロ除算することもできます。

1 / LOG(t1.[AttrCount] / t2.clustersize)

これは2つの方法で発生する可能性があります。

  1. t2.ClusterSizeがゼロの場合
  2. t1.AttrCount / t2.ClusterSize= 1の場合( LOG(1)= 0のため)
于 2013-03-20T19:27:38.483 に答える
1

まず、現在表示されている実際の値に関係なく、「ゼロ除算」のキャッチを入れます。

次に、ROW_NUMBERトリックを使用して、問題の原因となっている特定の行なのか、クエリ全体なのかを判断します。

これは一般的な例で、「ゼロ除算」「キャッチ」を入れています。そして、ROW_NUMBERトリックを示します。

クエリの最初の実行が失敗した場合は、値を=2に変更します。

Use Northwind
GO


Select derived1.*
From
    (
        select 
        [OrderID] , [ProductID] ,
        [MyRowId] = ROW_NUMBER() OVER(ORDER BY [OrderID] , [ProductID] )
        ,
        [Division1] = 
            case
                when LOG(Quantity) = 0 then 0.00
                when OrderID = 0 then 0.00
                else (UnitPrice / LOG(Quantity) / convert(float, OrderID) ) 
            end

        from 
        [dbo].[Order Details]
    )  as derived1

Where 
    derived1.[MyRowId] = 1 /* << Increment this by 1 until you find the problem row */

編集

すべての値を表示する必要があります。

これにより、除算ゼロの問題がより迅速に明らかになります。

SELECT 
    t1.[ID], 

t1.[AttrCount] , 
LOG(t1.[AttrCount] ,
t2.clustersize AS Float , 

    SUM(1 / LOG(t1.[AttrCount] / t2.clustersize AS Float)) AS 'uu'
FROM 
    [Testing].[dbo].[entropytemp5] t1, [Testing].[dbo].[entropyclustersize] t2 
GROUP BY 
    t1.ID
于 2013-03-20T18:25:19.983 に答える