2016-05-30 13 views
0

私はこのように、この機能を実行すると:のErr 1292 - 切り捨てられた間違ったDOUBLE値:'70、40,77,28,23,72,82,38,29'

enter image description here

これは私です関数が定義された:

CREATE FUNCTION kyf_getFormationComat(heroSdIds VARCHAR(128), uid VARCHAR(128)) 
RETURNS INT(11) 
BEGIN 
    DECLARE comat INT(11); 
    SET comat = (SELECT SUM(a.comat) FROM ky_heroinfo a WHERE a.uid = uid AND a.staticdata_id in (heroSdIds)); 
    RETURN comat; 
END 
+0

それは、関数呼び出しの二重引用符の使用に関連していませんか? (つまり、一重引用符を使用する必要があります) – colmde

+0

単引用符を使用しています。同じエラーです。 –

+0

'staticdata_id'が数字の場合、何をしようとしても動作しません。 CSV文字列は、データベース検索を行うためのひどい形式です。 –

答えて

0

heroSdIdsが文字列である、したがって、あなたはSELECTクエリでIN()を使用することはできません。

SELECT SUM(a.comat) FROM ky_heroinfo a 
    WHERE a.uid = uid AND a.staticdata_id in (heroSdIds) 
条件に

a.staticdata_id in (heroSdIds) 

は実際にあなたに与えます:

a.staticdata_id in ("70,40,77,28,23,72,82,38,29") 

を引用符に注意してください。これはまだ文字列で、の単一値です。それはあなたが、文字列関数FIND_IN_SET()機能の代わりIN()で試すことができます動作させるために

a.staticdata_id in (70,40,77,28,23,72,82,38,29) 

:しかし、それを動作させるために、IN()は、カンマで区切って複数の値であることを、それを必要とします。

することで試してみてください:

FIND_IN_SET(a.staticdata_id, heroSdIds) 

だから、全体のクエリは次のようになります。

SELECT SUM(a.comat) FROM ky_heroinfo a 
    WHERE a.uid = uid AND FIND_IN_SET(a.staticdata_id, heroSdIds) 
+0

ありがとう、dragoste.it作品 –

関連する問題