我试图通过ColdFusion更改查询的某些内容。好吧,我不能尝试查询本身因为我从外部来源获取查询
我有以下查询
(q.company_na = 'a, b, c, d')
我试图将其转换为
(q.company_na in ('a, b, c, d'))
我正在使用正常替换,但这不会解决问题。我看过我的尝试是这样的
<cfset data = Replace(data,'q.company_na = ','q.company_na IN ','ALL')>
但是我错过了IN周围的开口和收尾支架。我该如何处理?
答案 0 :(得分:2)
查询参数的另一个好处
where q.company_na in (
<cfqueryparam cfsqltype="cf_sql_char" value="a,b,c,d" list="yes">
)
答案 1 :(得分:0)
在Dan的回答中播放riff,您可以向查询对象添加参数。
IN (?)
。query.addParam(...)
,请参阅query object documentation)。
list
属性设置为true
。sql
属性。答案 2 :(得分:0)
你能尝试这样的事吗?
<cfset str = "(q.company_na = 'a, b, c, d')" />
<cfset str = REReplace(str, "(,)\s*", "'\1'", "all") />
<cfset str = REReplace(str, "= ('[^)]*)", "IN (\1)") />
输出:
(q.company_na IN ('a','b','c','d'))
如果您希望输出
(q.company_na in ('a, b, c, d'))
(我无法想象你这样做,因为这在语义上与在这个例子中使用=
相同),然后简单地省略上面的第二行并执行此操作:
<cfset str = "(q.company_na = 'a, b, c, d')" />
<cfset str = REReplace(str, "= ('[^)]*)", "IN (\1)") />