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
在数据库中,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