【问题标题】:SQL WHERE CONTAINS statement referencing columns not static textSQL WHERE CONTAINS 语句引用非静态文本的列
【发布时间】:2018-08-17 07:33:30
【问题描述】:

我在下面有这些数据:

FName | Lname | Notes                  | Flag
-----   -----   -----                    ----
John    Smith   John Smith didn't know     1
Bill    Jones   Tom Johnson knows          0

我需要创建和填充一个变量 (Flag),它查看 Notes 列,在 Fname 和 Lname 列中搜索值,如果 Notes 同时包含 Fname 和 Lname 值,则分配 1,如果仅包含 1,则分配 0 ,或者没有来自 Fname 和 Lname 的值。

我查看了 CONTAINS、LIKE 和 INSTR,但在引用时遇到问题,我看到的示例希望我输入静态值以搜索 ("John"),而不是列引用 (" Fname")。

我想写一个 CASE 语句,上面写着

  • 查看每一行,如果 Notes 字段包含 Fname 和 Lname 字段中的值,则 Flag =1,否则,Flag =0。

我试过了

CASE
    WHEN
    (
    SELECT
        Fname, Lname, Notes
    FROM
        table
    WHERE CONTAINS ((Notes, Fname) AND (Notes, Lname)) > 0
    )
    THEN '1' ELSE '0' END
    AS Flag
    FROM table;

感谢任何帮助。谢谢 !

【问题讨论】:

  • 将 case 表达式改为选择列表。
  • contains 是非标准运算符。请为您正在使用的数据库产品添加标签postgresqloracledb2sql-server、...
  • AHWNN - 这是一个 Oracle 数据库,我添加了标签。 JarlH - 谢谢你的帮助!

标签: sql oracle where-clause contains


【解决方案1】:

不确定是否需要合并/isnull。

select
case 
    when ((Notes like '%' + coalesce(u.FName,'') + '%')  and (Notes like '%' + coalesce(LName,'') + '%'))
    then 1
    else 0
end Flag
from Table


update t
set t.Flag = 
    case 
        when ((Notes like '%' + coalesce(u.FName,'') + '%')  and (Notes like '%' + coalesce(LName,'') + '%'))
        then 1
        else 0
    end
From Table t

【讨论】:

    【解决方案2】:

    你很亲密:

    SELECT 
        CASE WHEN
            t.Notes LIKE '%' + t.FName + '%'
            AND 
            t.Notes LIKE '%' + t.LName + '%'
        THEN 1
        ELSE 0 END AS Flag
    FROM
        table AS t
    

    但是,如果您真的只想过滤 Flag = 1 的位置,则不需要将其作为列:

    SELECT 
        *
    FROM
        table AS t
    WHERE
        CASE WHEN
            t.Notes LIKE '%' + t.FName + '%'
            AND 
            t.Notes LIKE '%' + t.LName + '%'
        THEN 1
        ELSE 0 END =1
    

    【讨论】:

    • 我想要实际的列,否则你是对的,我可以过滤。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多