【问题标题】:Find Records That Haven't Specific Characters查找没有特定字符的记录
【发布时间】:2019-04-20 20:15:18
【问题描述】:

我有一个表,它有一个列Name。用户可以指定一些字符,以便名称列不应包含所有这些字符。如何为未知数量的字符动态执行此操作?

谢谢

【问题讨论】:

    标签: sql sql-server sql-server-2016


    【解决方案1】:

    试试这个:

    Select name from tbl
    except
    select name from tbl
    join
    (select substring(a.b, v.number + 1, 1) letter
    from (select 'WCRTV' b) a
    join master..spt_values v on v.number < len(a.b)
    where v.type = 'P') chars
    on name like '%' + chars.letter + '%'
    

    首先,您将string 作为输入,这里输入的是静态值'WCRTV' 然后使用以下代码,您可以将string 转换为chars 的列表(此信用部分转到this link):

    select substring(a.b, v.number + 1, 1) letter
    from (select 'WCRTV' b) a
    join master..spt_values v on v.number < len(a.b)
    where v.type = 'P'
    

    然后你将结果与你的表连接起来,最后从表中减去结果。

    【讨论】:

      【解决方案2】:

      如果要查找包含禁止字符的名称,请使用like

      select name
      from tbl
      where name like '%[' + @forbidden_characters + ']%'
      

      例如,如果要忽略的字符是数字,则@forbidden_characters 将包含'0123455789'

      如果字符存储在表格中,您可以使用JOIN

      select t.name, f.c
      from t join
           @forbidden f
           on t.name like replace('%[<c>]%', '<c>', f.c);
      

      【讨论】:

        【解决方案3】:

        使用 NOT LIKE "%[your charecter]%" 的正则表达式

        【讨论】:

        • 好的,谢谢,但是如何?
        • 你应该在 [] 中提取所有字符集。例如你有 ''abc"' 使用它 NOT LIKE [abc] ,如果你有 "abcd" 使用它 [abcd].where 是混乱。请清除
        • 考虑这些字符:abc我想选择NOT LIKE N'%a%' and NOT LIKE N'%b%' and NOT LIKE N'%c%'的名字
        • 这样的事情怎么样...WHERE colName not IN (''A","B", "C", ... )
        • 如果你的角色是 a,b,c 那么它就不会像 "%[a|b|c]%"
        猜你喜欢
        • 1970-01-01
        • 2013-04-14
        • 1970-01-01
        • 2021-06-18
        • 1970-01-01
        • 2021-10-26
        • 2020-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多