【问题标题】:How to search whole words in a string that has delimiter ";"?如何在具有分隔符“;”的字符串中搜索整个单词?
【发布时间】:2019-11-26 20:56:29
【问题描述】:

我有一列具有类似'Blood work;MRI;ICC' 的值,它可以是一个字符串,其中一些单词由';' 分隔。

我想知道like 子句,当您搜索'Blood work''mri''icc' 而不是'blood''mr' 或@987654329 时,我如何进行查询以返回结果@?

【问题讨论】:

    标签: sql sql-server csv tsql


    【解决方案1】:

    要在 CSV 列表中搜索字段,一种方法是:

    where ';' + mycol + ';' like '%;mri;%'
    

    Demo on DB Fiddle

    with 
        csv as (select 'Blood work;MRI;ICC' v),
        match as (select 'mri' m union all select 'Blood work' union all select 'Blood')
    select csv.v, match.m,
        case when ';' + csv.v + ';' like '%;' + match.m + ';%' 
            then 'match' 
            else 'no match' 
        end matched
    from csv
    cross join match 
    
    v |米 |匹配的 :----------------- | :--------- | :-------- 血液检查;MRI;ICC |核磁共振 |匹配 血液检查;MRI;ICC |血液工作 |匹配 血液检查;MRI;ICC |血 |不匹配

    【讨论】:

    • 太棒了!这很完美。谢谢!我也感谢您编辑我的问题,使其更易于理解。
    【解决方案2】:

    我个人会使用字符串拆分器:

    SELECT {Columns}
    FROM dbo.YourTable YT
         CROSS APPLY STRING_SPLIT (YT.YourColumn,';') SS
    WHERE SS.[Value] = 'mri';
    

    如果您没有使用 SQL Sevrer 2016+,那么您可以使用自定义拆分器,例如 DelimitedSplit8K_LEAD

    【讨论】:

    • 感谢您的回答。我将在我们的 sql server 2016 实例之一上尝试此操作。
    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2021-09-07
    • 1970-01-01
    相关资源
    最近更新 更多