2016-07-17 28 views
1

私はこのクエリがうまく選択された理由を理解しようとしていますが、私はそれを使って一時テーブルを作成することはできません... IF = '', 0ものは元のクエリに存在しませんでした潜在的に空の文字列になる可能性のあるものを合計しようとしていないことを確認してください。しかし、問題は解決しませんでした。これを選択した作品と、正しい結果セットを返します。MySQLのクエリは通常のSELECTとして動作しますが、CREATE TABLE ASでは動作しません。

SELECT 
    SUM(((IF(reserve_transactions.Revenue = '', 
     0, 
     reserve_transactions.Revenue) * IF(reserve_transactions.Confidence = '', 
     0, 
     reserve_transactions.Confidence))/100)) AS rawadjusted 
FROM 
    (store_locations 
    LEFT JOIN reserve_transactions ON ((store_locations.ID = location_sales))) 
GROUP BY store_locations.Loc_Long 

しかし、これはしません:

CREATE TEMPORARY TABLE tmptable_which_doesnt_work AS SELECT 
    SUM(((IF(reserve_transactions.Revenue = '', 
     0, 
     reserve_transactions.Revenue) * IF(reserve_transactions.Confidence = '', 
     0, 
     reserve_transactions.Confidence))/100)) AS rawadjusted 
FROM 
    (store_locations 
    LEFT JOIN reserve_transactions ON ((store_locations.ID = location_sales))) 
GROUP BY store_locations.Loc_Long 

エラーは次のとおりです。Error Code: 1292. Truncated incorrect DECIMAL value: ''

私は状況は同じである他のクエリを持って、実際に。時には他の切り捨てられた誤ったタイプがあります。私はここで何が欠けていますか?

+1

「厳密なSQLモード」 – 1000111

+0

「収益」が「VARCHAR」列の場合はデータベースがひどく設計されていると思います数値の列、たとえば'DECIMAL'。 – Andreas

+0

[更新ステートメントでキャストを使用すると[mysqlエラー1292]の潜在的な複製](http://stackoverflow.com/q/21142273/5221149)。 – Andreas

答えて

0

私はこの問題は、データと数字のみのエントリを選択するロジックことができることを考える - あなたは次のように関数を定義しようとすることができます:

CREATE FUNCTION IsNumeric (sIn varchar(1024)) 
RETURNS tinyint 
RETURN sIn REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$'; 

と2つの引数のWHERE句でそれを適用します(How do I check to see if a value is an integer in MySQL?

関連する問題