SQL CASE isNumeric有多个值?

时间:2015-10-22 17:12:43

标签: sql mysqli case isnumeric

我有一个实例,有时我们不确定按名称文本或名称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)

哪个也不起作用。想法?感谢您提前提供任何帮助。

2 个答案:

答案 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'))