字符号a-Z判断

viznet 2008-12-02 10:47:25
怎么防止字段里添加除了a-z的其它字符?
插入之前怎么做判断?
...全文
107 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyde100 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 viznet 的回复:]
如果判断A-Z, 0-9 and /
要怎么写?

是这样吗?

declare @a varchar(50)
set @a ='afasdffdfA5A/!'

if PATINDEX('%[^a-z^0-9^/]%',@a) > 0
print 'error'
[/Quote]


if PATINDEX('%[^a-z]%',@a) > 0 and PATINDEX('%[^0-9]%',@a) > 0
水族杰纶 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 viznet 的回复:]
如果判断A-Z, 0-9 and /
要怎么写?

是这样吗?

declare @a varchar(50)
set @a ='afasdffdfA5A/!'

if PATINDEX('%[^a-z^0-9^/]%',@a) > 0
print 'error'
[/Quote]
if object_id('tb')is not null drop table tb
go
create table tb([Name] varchar(10) check ( PATINDEX('%[^a-z0-9]%',[name])= 0))
insert tb select 'ad12'
insert tb select 'a'
insert tb select '12'
insert tb select '--'
/*伺服器: 訊息 547,層級 16,狀態 1,行 1
INSERT 陳述式與 COLUMN CHECK 條件約束 'CK__tb__Name__0E6EF216' 發生衝突。衝突發生於資料庫 'db_Study',資料表 'tb', column 'Name'。
陳述式已經結束。
*/
水族杰纶 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wufeng4552 的回复:]
SQL codecreate table tb([Name] varchar(10) check ( [name] like '%[a-z]%') )
[/Quote]
--錯了
if object_id('tb')is not null drop table tb
go
create table tb([Name] varchar(10) check ( PATINDEX('%[^a-z]%',[name])= 0))
viznet 2008-12-02
  • 打赏
  • 举报
回复
如果判断A-Z, 0-9 and /
要怎么写?

是这样吗?

declare @a varchar(50)
set @a ='afasdffdfA5A/!'

if PATINDEX('%[^a-z^0-9^/]%',@a) > 0
print 'error'


-狙击手- 2008-12-02
  • 打赏
  • 举报
回复
1\check
2\trigger
-狙击手- 2008-12-02
  • 打赏
  • 举报
回复

------------------------------------1
create table tb([Name] varchar(10) check ( PATINDEX('%[^a-z]%',[name])= 0))

go
insert into tb select 'asdf'
insert into tb select 'asdf;'
insert into tb select 'asdf1'
select * from tb
/*服务器: 消息 547,级别 16,状态 1,行 1
INSERT 语句与 COLUMN CHECK 约束 'CK__tb__Name__20CCFFE6' 冲突。该冲突发生于数据库 'csdn_test',表 'tb', column 'Name'。
语句已终止。
服务器: 消息 547,级别 16,状态 1,行 1
INSERT 语句与 COLUMN CHECK 约束 'CK__tb__Name__20CCFFE6' 冲突。该冲突发生于数据库 'csdn_test',表 'tb', column 'Name'。
语句已终止。
Name
----------
asdf

(所影响的行数为 1 行)
*/
drop table tb

---------------------------------2
create table tb([Name] varchar(10) )

go

go

create trigger tr_insert
on tb
instead of insert
as
begin
if exists(select 1 from inserted where PATINDEX('%[^a-z]%',[name])>0)
begin
raiserror('INSERT 语句添加除了a-z的其它字符', 16, 1)
ROLLBACK
end
else
insert into tb select * from inserted
end
go


insert into tb select 'asdf1'
服务器: 消息 50000,级别 16,状态 1,过程 tr_insert,行 9
INSERT 语句添加除了a-z的其它字符
insert into tb select 'asdf;'
服务器: 消息 50000,级别 16,状态 1,过程 tr_insert,行 9
INSERT 语句添加除了a-z的其它字符


insert into tb select 'asdf'
select * from tb
Name
----------
asdf
asdf

(所影响的行数为 2 行)
drop table tb
dawugui 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 viznet 的帖子:]
怎么防止字段里添加除了a-z的其它字符?
插入之前怎么做判断?
[/Quote]
如果要区分大小写,得使用ascii函数了.
hyde100 2008-12-02
  • 打赏
  • 举报
回复
declare @a varchar(50)
set @a ='afasdf1fdf'

if PATINDEX('%[^a-z]%',@a) > 0
print 'error'
结果:
error
hyde100 2008-12-02
  • 打赏
  • 举报
回复
if PATINDEX('%[^a-z]%',col) > 0
print 'error'
水族杰纶 2008-12-02
  • 打赏
  • 举报
回复
create table tb([Name] varchar(10) check ( [name] like '%[a-z]%') )

34,590

社区成员

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

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