我有一个实例,有时我们不确定按名称文本或名称ID进行过滤。我用案例陈述和isnumeric
解决了这个问题。例如,我们有id和name值,但我们不确定要求过滤哪个列。 rtresource.id
是数字,在这种情况下,我们可以使用值'183'
。如果rtresource.rname (varchar)
正在尝试过滤,那么我们将为该ID“Jane Thompson”设置rname。
所以过滤器是
rtresource.id=183
或
rtresource.rname='Jane Thompson'
取而代之的是
rtresource.rname in (CASE IsNumeric(rtresource.rname) WHEN 1 then '183' else 'Jane Thompson' End)
这很棒。问题是传递了多组id / rname。通常,我们会问rtresource.id in (183, 23) or rtresource.rname in ('Jane Thompson','John Doe')
。如何通过案例陈述解决这个问题?
rtresource.rname in (CASE IsNumeric(rtresource.rname) WHEN 1 then ('183','23') else ('Jane Thompson','John Doe') End)
上面抱怨值之间的逗号。我也试过了:
rtresource.rname in (CASE IsNumeric(rtresource.rname) WHEN 1 then ('183'+','+'23') else ('Jane Thompson'+','+'John Doe') End)
哪个也不起作用。想法?感谢您提前提供任何帮助。
答案 0 :(得分:0)
您必须为列表中的每个值重复case
:
where rtresource.rname in (
CASE IsNumeric(rtresource.rname) WHEN 1 then '183' else 'Jane Thompson' End,
CASE IsNumeric(rtresource.rname) WHEN 1 then '23' else 'John Doe' End
)
或由于值不相交,只需:
where rtresource.rname in (183, 23, 'Jane Thompson', 'John Doe')
它会表现得更好,因为它将使用列的索引(如果有的话),并且更容易编码,理解和扩展。
答案 1 :(得分:0)
想出来。简而言之:
(IsNumeric(rtresource.rname)= 1和rtresource.rname in('183','23')) 要么 (IsNumeric(rtresource.rname)!= 1和rtresource.rname('Jane Thompson','John Doe'))