使用substring来计算具有前导零的表值1

时间:2013-03-12 17:12:04

标签: sql coldfusion substring

我没有运气这项工作,我不确定我错过了什么。我是coldfusion和SQL的新手,还在学习。

我在表单中有一个绑定。用户选择需要的服务类型后,生成位于另一个表中的名称。我遇到的问题是服务类型使用位于两个表中的服务号。但是在一个表中,创建者将前导零添加到数字中。例如,一个表将有205,另一个表将有0000205我需要比较这些以获得我想要的名称值。这是我到目前为止的编码。这是使用coldfusion和java。

cfc文件名为servicetype2

<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>

再次绑定工作正常,但我无法得到名称,我确信它与我的SQL语句比较205到0000205.关于如何使sql语句工作的任何建议将是大。如果您发现绑定中的任何其他错误也会很好。 提前感谢您提供的任何建议。

2 个答案:

答案 0 :(得分: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位数字,前导零。

答案 1 :(得分:1)

您最好的选择是在SQL级别上施放值。这很容易通过将列的选择更改为:SELECT ..., CAST(SRTY_NBR AS UNSIGNED) ...这将截断前导零。