ColdFusion 9:如何用空格填充列表值

ColdFusion 9: how to pad list values with spaces

在数据库中,style_id 列定义为 CHAR(14)。 我需要能够用空格将列表中的值填充为 14。 我该怎么做? 谢谢,

<cfset style_list = replace(#FORM.style_id#," ","","all")>

select *
from T
where 
    <cfif IsDefined("form.style_id") and form.style_id is not "">
        style_id in 
                    (
                        <cfqueryparam
                            value="#UCASE(style_list)#"
                            cfsqltype="cf_sql_varchar" 
                            list="yes" />
                    ) 
 </cfif>

反其道而行之。 Trim SQL 语句中 style_id 列的内容,以便您可以更好地匹配 style_list 的内容。

使用 ljustify or rjustify 用空格填充字符串。

您可以使用循环预处理列表:

<cfset padded_list=""/>
<cfloop list="#style_list#" item="style">
  <cfset padded_list=listappend(padded_list, rjustify(style, 14))/>
</cfloop>

如果您使用的是较新版本的 ColdFusion 或垫片,您可能还有 listmap,它不那么难看:

<cfset style_list=listmap(style_list, function(style) { return rjustify(style, 14); })/>

为什么您认为需要填充这些值?使用 cfsqltype CF_SQL_CHAR,它应该可以在没有任何填充的情况下正常工作。也许它没有按预期工作,因为 left side of the comparison (column) is type CHAR while the right (cfqueryparam) is type VARCHAR?

我测试了您的查询,它在 CF 9,0,2,282541 和 SQL 服务器上运行良好。它还可以与 CF 9.0.2 和 Oracle 12G 一起正常工作。 CFQueryparam 似乎可以自动处理事情。

DDL:

CREATE TABLE someTable(style_id char(14))
INSERT INTO someTable VALUES ('abc'),('efg          ')

CF:

<!--- worked with both CF_SQL_VARCHAR and CF_SQL_CHAR ---> 
<cfset style_list = "abc,efg">
<cfquery name="qTest" datasource="YourDSN">
    SELECT *
    FROM   SomeTable
    WHERE  style_id in 
                    (   <cfqueryparam
                            value="#UCASE(style_list)#"
                            cfsqltype="cf_sql_char" 
                            list="yes" />
                    ) 
</cfquery>
<cfdump var="#qTest#">

结果:

RESULTSET   
query
       STYLE_ID
1      abc  
2      efg