今天在处理一个用户名数据库时,发现有些不正常的数据存在,按照逻辑,用户名只能是数字,字母,下划线和纯中文这样的字符组合存在,不应该有其他组合存在,但是发现数据库中由于各种历史原因,有些不正常的存在,如何找到这些异常数据?
以下是解决方法:
- if object_id('[t1]') is not null
- drop table [t1]
- create table [t1]([c] nvarchar(20))
- insert [t1]
- select 'aaa' union all -- 此数据不应该被搜索到
- select 'bcds' union all -- 此数据不应该被搜索到
- select 'a1' union all -- 此数据不应该被搜索到
- select '啊' union all -- 此数据不应该被搜索到
- select '^%' union all -- 应该搜索到
- select 'ew1' union all -- 此数据不应该被搜索到
- select '344' union all -- 此数据不应该被搜索到
- select '__' union all -- 此数据不应该被搜索到
- select '213_21' union all -- 此数据不应该被搜索到
- select 'a_2' union all -- 此数据不应该被搜索到
- select 'd' union all -- 此数据不应该被搜索到
- select 'ddd' union all -- 此数据不应该被搜索到
- select '电风扇' union all -- 此数据不应该被搜索到
- select '★思寒★' union all -- 应该搜索到
- select 'Ω' union all -- 应该搜索到
- select 'トントン' union all -- 应该搜索到
- select '***' union all -- 应该搜索到
- select '///////' union all -- 应该搜索到
- select '@-@' union all -- 应该搜索到
- select '@小慧' union all -- 应该搜索到
- select '~*晓菊*~' union all -- 应该搜索到
- select '啊★洛' union all -- 应该搜索到
- select '不思議の夜' union all -- 应该搜索到
- select '(嘉宾)胡飞' union all -- 应该搜索到
- select '--------------' -- 应该搜索到
- select * from [t1] WHERE PATINDEX('%[0-9a-z_]%',c)=0
- and PATINDEX('%[^吖-座]%',c) <> 0