如何检查出“单位编码”字段中有非法字符?

Jpp 2004-07-09 02:39:18
比如只能允许用字母和数字。

问题解决后马上结贴。
...全文
180 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jpp 2004-07-09
  • 打赏
  • 举报
回复
我理解,需要把^-放到最后就可以。对吧?呵呵
pbsql 2004-07-09
  • 打赏
  • 举报
回复
我看了,仅仅是顺序不同就会有不同结果
Jpp 2004-07-09
  • 打赏
  • 举报
回复
非常地感谢!
zjcxc 元老 2004-07-09
  • 打赏
  • 举报
回复
--晕了:
select case when 'A-BC' like '%[^A-Z,^0-9,^.,^*,^_,^-]%'
then '非法' else '合法' end

--结果:合法

select case when 'A-BC' like '%[^A-Z,^0-9,^_,^-,^.,^*]%'
then '非法' else '合法' end

--结果:非法
zjcxc 元老 2004-07-09
  • 打赏
  • 举报
回复
select * from(
select 1 col1,'123' col2 union all
select 2 col1,'A-BC' col2 union all
select 3 col1,'AAA*BBB' col2 union all
select 4 col1,'ab%c' col2
) t
where col2 like '%[^a-z,^A-Z,^0-9,^.,^*,^_,^-]%'

/*--结果:

col1 col2
----------- -------
4 ab%c

(所影响的行数为 1 行)
--*/
Jpp 2004-07-09
  • 打赏
  • 举报
回复
十分佩服两位大侠!!

非常地感谢!

结贴了。
zjcxc 元老 2004-07-09
  • 打赏
  • 举报
回复
select case when 'aa*._asdf12312-bb' like '%[^A-Z,^0-9,^.,^*,^_,^-]%'
then '非法' else '合法' end

--结果:合法
zjcxc 元老 2004-07-09
  • 打赏
  • 举报
回复
--这样没问题吧?

select patindex('%[^A-Z,^0-9,^.,^*,^_,^-]%','aa*._asdf12312-bb')

--结果:0
pbsql 2004-07-09
  • 打赏
  • 举报
回复
例如:
select * from
(
select 1 col1,'123' col2 union all
select 2 col1,'A-BC' col2 union all
select 3 col1,'AAA*BBB' col2 union all
select 4 col1,'ab%c' col2
) t
where col2 like '%[^a-z,^A-Z,^0-9,^_,^-,^.,^*]%'

上面第2、4条记录都会出来,下面的则只会出来第4条记录:

select * from
(
select 1 col1,'123' col2 union all
select 2 col1,'A-BC' col2 union all
select 3 col1,'AAA*BBB' col2 union all
select 4 col1,'ab%c' col2
) t
where replace(col2,'-','') like '%[^a-z,^A-Z,^0-9,^_,^-,^.,^*]%'
Jpp 2004-07-09
  • 打赏
  • 举报
回复
hudan(中文昵称), 如果有^-, 结果就不正确了。
Jpp 2004-07-09
  • 打赏
  • 举报
回复
如果处理 '-' 确实有BUG,我在想想别的办法。非常感谢2位!

一会结贴。
hudan 2004-07-09
  • 打赏
  • 举报
回复
select * from 表 where 单位编码 like '%[^a-z,^A-Z,^0-9,^_,^-,^.,^*]%'
Jpp 2004-07-09
  • 打赏
  • 举报
回复
麻烦2位了。

我希望得到有非法字符的记录,合法字符是 A-Z 0-9 _ - . *

可 '-' 不知道怎么写。
pbsql 2004-07-09
  • 打赏
  • 举报
回复
很久以前讨论过,好象SQL在“-”特殊字符处理上有bug,改成这样(忽略对-的判断):
where replace(name,'-','') like '%[^a-z,^A-Z,^0-9,^_,^-,^.,^*]%'
zjcxc 元老 2004-07-09
  • 打赏
  • 举报
回复
--得到是所有有 '-' 的记录。

select * from 表 where 单位编码 like '%-%'
Jpp 2004-07-09
  • 打赏
  • 举报
回复
实际许可的字符有:A-Z, 0-9, _, -, ., *。不明白怎么写了。好像有冲突。
Jpp 2004-07-09
  • 打赏
  • 举报
回复
更正:得到是所有有 '-' 的记录。怎么办?
Jpp 2004-07-09
  • 打赏
  • 举报
回复
谢风云, 可是:

rtrim(单位编码) like '%[^a-z,^A-Z,^0-9, ^., ^-, ^*]%') 却得出有 '-' 的记录,什么原因? 好像 '-' 是特别的字符。怎么处理?
zjcxc 元老 2004-07-09
  • 打赏
  • 举报
回复
--这样写你看得明白了吧?

select 单位编码,非常字符开始位置=patindex('%[^a-z,^0-9]%',单位编码)
from 表
where 单位编码 like '%[^a-z,^0-9]%'
pbsql 2004-07-09
  • 打赏
  • 举报
回复
[^a-z,^A-Z,^0-9]是指不在a-z,A-Z,0-9之间,当然是非法字符了,不要理解错了
加载更多回复(5)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧