【问题标题】:SQL Case Statement multiple matchesSQL Case 语句多次匹配
【发布时间】:2023-02-07 04:52:54
【问题描述】:

我正在尝试在 SQL 中为分组创建一个 case 语句,但是我遇到了一个问题,如果有多个匹配项,它的分组就会不正确。

有没有一种方法可以逐字搜索而不是整个搜索并给出首先出现的单词的结果?

主题示例:

the animal rode in the car --- EXPECTED RESULT Animal

in the car the animal rode --- EXPECTED RESULT CAR... actual result Animal

CASE 
WHEN Subject like '%animal%' then 'Animal'
WHEN Subject like '%car%' then 'Car'
END as Category 

【问题讨论】:

  • 它按顺序运行,将选择第一个命中,因此您需要另一个条件,例如位置
  • SQL SERVER 不能很好地处理字符串操作。您可能需要考虑比较职位。例如: CASE WHEN CHARINDEX('CAR',COL,1) > CHARINDEX('CAT',COL,1) THEN 'CAR' WHEN CHARINDEX('CAT',COL,1) > CHARINDEX('CAR',COL, 1)然后“猫”结束
  • 检查我修改后的答案

标签: sql case


【解决方案1】:

你弄错了它是如何检查的。第一个 when 子句将首先被检查,如果它匹配,第二个将不会被评估。你的两个例子都匹配第一个 when,所以这就是被触发的。

这应该给你你想要的:

case 
 when Subject  like '%animal%' and (Subject not like '%car%' OR  CHARINDEX('animal',Subject,1) <= CHARINDEX('car',Subject,1)) then 'Animal'
 when Subject  like  '%car%'  and (Subject not like '%animal%' OR  CHARINDEX('car',Subject,1) <= CHARINDEX('animal',Subject,1))  then 'Car' 
 else 'UNKNOWN'
 end AS Category,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 2014-08-18
    • 2017-08-06
    • 2011-10-17
    • 2022-06-22
    相关资源
    最近更新 更多