1

この関数に関する ColdFusion のドキュメントにはvaluelist、値を評価しないと記載されています。これは、過去に私にとって常にそのように動作していた方法です。私はvaluelist過去に何度もこの機能を使用してきましたが、これまでこの問題に遭遇したことはありません。CF9.0.1 を使用していますが、これはもともと CF9.0 のインスタンスで発生しました。

number浮動小数点値をサポートしている Oracle データベースから値を取得すると、状況が発生しました。格納される値はすべて整数であり、浮動小数点数ではありません。以下のコードは、私たちが見ている動作を再現しています。データは、( を使用して) 変更できるストアド プロシージャを介して取得されますがCAST、可能であれば避けたいと考えています。

<cfscript>
    qryVLTest = queryNew('member_id') ;
    for ( i = 1; i LTE 10; i=i+1) {
      queryAddRow(qryVLTest,1) ;
      querySetCell(qryVLTest,'member_id',i) ;   
    }
    writedump(qryVLTest) ;
    writeoutput(valuelist(qryVLTest.member_id)) ;
</cfscript>

ダンプには、予想される値が表示されます: 整数 1 ~ 10。

ただし、valuelist関数の出力は次を返します。

1,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0

最初の値以降のすべての値が評価され、float に変換されます。これはなぜですか? 今後これを防ぐにはどうすればよいですか?

4

2 に答える 2

6

2 つの選択肢があります。あなたがすることができます:

querySetCell(qryVLTEst,"member_id","#i#")

文字列を強制する必要があります。または、それが必要な場合は INT を指定できます (azawaza が示したように)。

queryNew("member_id","Integer");
于 2012-06-18T14:46:47.430 に答える
3

CAST()は使いたくないとおっしゃっていましたが、おそらくOracleを意味していました。QのQを使用してCFでキャストすることもできます。

Oracle Queryを実行してから、Query of a Queryを使用して、次のように数値を再キャストします。

<cfquery name="blah" dbtype="query">
SELECT CAST(member_ID AS Integer) AS member_ID
FROM  myFancyPantsOracleQuery
</cfquery>

それは私が思うトリックをするでしょう。

于 2012-06-18T15:29:49.700 に答える