【问题标题】:TSQL Filter Rows with invalid charactersTSQL 过滤具有无效字符的行
【发布时间】:2022-11-11 01:01:23
【问题描述】:

我有一个应该是 Active Directory 用户列表的表。在许多情况下,它们的名称中包含无效字符

我需要有一个查询,它只选择那些用户名不包含

这些字符中的任何一个。

"\/[]:;|=,+*?<> 

就像是

select username from userlist where username not like regex

我知道如何轻松过滤其中一个,但不确定如何查找其中任何一个。

【问题讨论】:

  • 用户名不像 '%\%' 和用户名不像 '%/%' 等等......
  • T-SQL 没有正则表达式。您可以将LIKE 与要排除的字符匹配的模式一起使用,例如WHERE UserName NOT LIKE '%["\/[]:;|=,+*?&lt;&gt; ]%'。模式[...] 匹配方括号内任何字符的单个实例

标签: sql sql-server


【解决方案1】:

就像是 :

WHERE MyColumn LIKE '%["/:;|=,+*?<>]%' 
   OR CHARINDEX('[', MyColumn) > 0
   OR CHARINDEX(']', MyColumn) > 0

应该努力寻找异常行

【讨论】:

    【解决方案2】:

    您可以使用转义字符:

    declare @Samples as Table ( Val NVarChar(32) );
    insert into @Samples ( Val ) values
      ( '[' ), ( ']' ), ( '"' ),
      ( 'a/c:d;e|f=g,h+i*j?k<l>m' ),
      ( 'Vogon poetry.' );
    
    -- Undesirable characters: "/[]:;|=,+*?<>
    
    select Val, case when Val like N'%["/[↕]:;|=,+*?<>]%' escape N'↕' then 'Fail' else 'Pass' end as Status
      from @Samples;
    

    dbfiddle。

    【讨论】:

      猜你喜欢
      • 2018-06-17
      • 1970-01-01
      • 2018-10-21
      • 2020-03-06
      • 1970-01-01
      • 2013-12-01
      • 2011-03-14
      • 2015-09-10
      • 1970-01-01
      相关资源
      最近更新 更多