SQL CASE isNumeric 具有多个值?
Posted
技术标签:
【中文标题】SQL CASE isNumeric 具有多个值?【英文标题】:SQL CASE isNumeric with multiple values? 【发布时间】:2015-10-22 17:12:42 【问题描述】:我有一个实例,有时我们不确定是否按名称文本或名称 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')
。如何用 case 语句解决这个问题?
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)
这也不起作用。想法?感谢您提前提供任何帮助。
【问题讨论】:
rtresource.id in (183, 23) or rtresource.rname in ('Jane Thompson','John Doe')
..这不是过滤器吗?为什么需要case
表达式?
我真的很惊讶“这太棒了”,因为你的问题被标记为 mysql 并且 MySQL 中没有 IsNumeric()
函数。
@GordonLinoff..它是mysqli
【参考方案1】:
您必须为列表中的每个值重复 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')
性能会更好,因为它将使用列的索引(如果有的话),并且更容易编码、理解和扩展。
【讨论】:
【参考方案2】:想通了。跳过案例,而是:
(IsNumeric(rtresource.rname) = 1 and rtresource.rname in ('183','23')) 或者 (IsNumeric(rtresource.rname) != 1 and rtresource.rname in ('Jane Thompson','John Doe'))
【讨论】:
以上是关于SQL CASE isNumeric 具有多个值?的主要内容,如果未能解决你的问题,请参考以下文章