0

私はこの仕事をする運がなく、何が欠けているのかわかりません。私はColdFusionとSQLを初めて使用し、まだ学習しています。

フォーム内で行っているバインディングがあります。ユーザーがサービスタイプを選択した後、別のテーブルにある名前を生成する必要があります。私が抱えている問題は、サービスタイプが両方のテーブルにあるサービス番号を使用していることです。ただし、1つのテーブルで、作成者は数値に先行ゼロを追加しました。たとえば、一方のテーブルには205があり、もう一方のテーブルには0000205があります。これらを比較して、必要な名前の値を取得する必要があります。これが私がこれまでに持っているコーディングです。これはcoldfusionとjavaを使用しています。

servicetype2と呼ばれるcfcファイル

<cffunction name="getServiceType2" access="remote" returnType="array">
<cfargument name="CATG_NAME" type="string" required="true">

<cfset var data="">
<cfset var result=ArrayNew(2)>
<cfset var i=0>


<cfquery name="getServiceType2" datasource="SOME DATABASE">
select 1 AS SortBy,  '' AS SRTY_NBR, '' AS SRTY_NAME
from SOME TABLE
UNION
select distinct 2 AS SortBy, SRTY_NBR, SRTY_NAME
from SOME TABLE
where CATG_NAME = <cfqueryparam value="#ARGUMENTS.CATG_NAME#" cfsqltype="cf_sql_varchar"> AND EVLN_REQD_FLAG IS NOT NULL
order by SortBy
</cfquery>

<cfloop index="i" from="1" to="#getServiceType2.recordcount#">
<cfset result[i][1]=getServiceType2.SRTY_NAME[i]>
<cfset result[i][2]=getServiceType2.SRTY_NAME[i]>
</cfloop>

<cfreturn result>
</cffunction>

 //Table 2
<cffunction name="getUnion" access="remote" returnType="array">
<cfargument name="SRTY_NBR" type="string" required="true">


<cfset var result=ArrayNew(1)>

<cfquery name="union_rq" datasource="SOME DATABASE">
select UNI_NAME, substring(SRTY_NBR, patindex('%[^0]%',SRTY_NBR),10)
from SOME TABLE
where substring(SRTY_NBR, patindex('%[^0]%',SRTY_NBR),10)
     = <cfqueryparam value="#ARGUMENTS.SRTY_NBR#" cfsqltype="cf_sql_varchar"> 
 </cfquery>

 <cfset result[1]=union_rq.UNI_NAME>

 <cfreturn result>
 </cffunction>

私のフォームにあるコードは次のとおりです。

     <tr id="serv_ty2" style="display: inline;">
<td></td>
<td>Select Service:
     <cfselect name="service_type"
     bind="cfc:servicetype2.getServiceType2({catdesc})"
bindonload="false"/></td>
</tr>


     <tr id="union" style="display: inline;">
<td></td>
<td>Union Attached:
<cfinput name="uni_name"
     bind="cfc:servicetype2.getUnion({service_type})"
bindonload="false"
/></td>
</tr>

再度、バインディングは正常に機能していますが、名前を表示できません。これは、205と0000205を比較するSQLステートメントに関係していると確信しています。sqlステートメントを機能させる方法についてのアドバイスは素晴らしいでしょう。バインディングに関する他のエラーに気付いた場合も同様です。アドバイスをよろしくお願いします。

4

2 に答える 2

2

NumberFormat()クエリで使用できます

WHERE srty_nbr IN (<cfqueryparam    
    value="#ARGUMENTS.SRTY_NBR#,#NumberFormat(ARGUMENTS.SRTY_NBR,'0000000')#" 
    cfsqltype="cf_sql_varchar" list="true"> 

#NumberFormat(ARGUMENTS.SRTY_NBR,'0000000')#すべての数値が先行ゼロ付きの 7 桁であることを確認します。

于 2013-03-12T17:26:32.287 に答える
1

最善の策は、SQL レベルで値をキャストすることです。これは、列の選択を次のように変更することで簡単に実行できます。SELECT ..., CAST(SRTY_NBR AS UNSIGNED) ...これにより、先頭のゼロが切り捨てられます。

于 2013-03-13T00:51:20.450 に答える