我知道如何检查变量列表中表列的值,如下所示:
<cfquery datasource="test_sql" name="get">
Select a
From b
Where c In
(
<cfqueryparam cfsqltype="cf_sql_varchar" list="true" value="#d#">
)
</cfquery>
但是如何反转where子句呢?我试过这个,但没有工作:
<cfquery datasource="test_sql" name="get">
Select a
From b
Where <cfqueryparam cfsqltype="cf_sql_varchar" value="#c#"> In (d)
</cfquery>
然后在d列中存储的列表中查找值为c的任何匹配项。
。
C = 12345
Column D - 4 Rows
12344,12345,12346 --- Match (List Item 2)
12323,12327,12375 --- No Match
12312,12341,12345 --- Match (List Item 3)
12128,12232,12345 --- Match (List Item 3)
记录计数应该是3,因为该值在列表中总共有3个匹配。但是,当我运行此查询时,它不起作用。
我想很多人以前都偶然发现过这个小问题,并且知道解决办法。任何帮助将不胜感激!
这个查询逻辑应该可以工作
where d = <cfqueryparam cfsqltype="cf_sql_varchar" value="#c#">
--- c is only element
or d like <cfqueryparam cfsqltype="cf_sql_varchar" value="#c#,%">
--- c is first element
or d like <cfqueryparam cfsqltype="cf_sql_varchar" value="%,#c#,%">
--- c is in the middle somewere
or d like <cfqueryparam cfsqltype="cf_sql_varchar" value="%,#c#">
--- c is last element
在编译查询之前,它不知道变量c。如果您从替换列名的变量中删除cfqueryparam标记,它将工作。
<cfquery datasource="test_sql" name="get">
Select a
From b
Where #c# In (<cfqueryparam cfsqltype="cf_sql_varchar" list="true" value="#d#">)
</cfquery>