请教一个模式匹配表达式 因为有子集,估计无法通过规则实现。还是在插入,更新等的sql语句或者sp中控制好了。虽然约束性低了点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以的, 不过,不明白你为什么用rule而不用constraint. --测试数据create table BookInfo(id int,ISBN varchar(30))--添加constraintalter table BookInfo add constraint CISBN check ( patindex('%[^0-9/-]%', ISBN)=0)insert BookInfo select 1, '1-3'--清除drop table BookInfo 为什么上面的模式匹配表达式中字符'9'后面的两个字符 '/'和'-'颠倒一下顺序就不行了呢?比如颠倒顺序以后,如果执行 insert into BookInfo values('34224/-')不能插入了呢,或者说只要是带有 '-' 的字符串都不能插入表中呢? 我的意思是说:把你写的:check ( patindex('%[^0-9/-]%', ISBN)=0)改成 check ( patindex('%[^0-9-/]%', ISBN)=0)就不行了,就不能插入带有'-'的字符串了,这是为什么呢? '-'是一个特殊的字符0-9代表从0, 1, 2, ...9之中的一个9-/是没有意义的,因为/的ASCII码比9的要小.例如说:select patindex('%[3-1]%', '-')select patindex('%[3-1]%', '3')select patindex('%[3-1]%', '2')select patindex('%[3-1]%', '1')这些都返回0.如果你将'-'放在末尾的话,它就只表示一个破折号了.如果你再问深一层的话,我也就说不清楚了。 CREATE TABLE tb1 (ISBN varchar(30) CHECK( ISBN IN('0','1','2','3','4','5','6','7','8','9','/','-') ));INSERT INTO tb1 VALUES('34'); 一句sql帮忙看下什么意思,不要以为很简单! 高手们请进:这贴子还不能结贴啊,每家公司都会碰到的问题。 SQL SERVER2005 如何将一个字段设置为FK,并且此字段设为其他表某字段的引用 一个子查询的问题。 如何在Qurey Analyzer中查询通过ODBC联接的Access数据表, 如何选择出一条记录有多少个数据(这条记录的非空数据的列数)? 存储过程传表名为参数 问合并记录集的问题 SQL问题,可不可以用group by 对一个字符型的字段进行累加了?????在线等!!!!! 查询结果保存到文件遇到的问题(送高分!!) 很难的问题 请教存储过程参数问题?
create table BookInfo(id int,ISBN varchar(30))
--添加constraint
alter table BookInfo
add constraint CISBN
check ( patindex('%[^0-9/-]%', ISBN)=0)
insert BookInfo select 1, '1-3'
--清除
drop table BookInfo
比如颠倒顺序以后,如果执行 insert into BookInfo values('34224/-')不能插入了呢,或者说只要是带有 '-' 的字符串都不能插入表中呢?
check ( patindex('%[^0-9-/]%', ISBN)=0)就不行了,就不能插入带有
'-'的字符串了,这是为什么呢?
0-9代表从0, 1, 2, ...9之中的一个
9-/是没有意义的,因为/的ASCII码比9的要小.例如说:
select patindex('%[3-1]%', '-')
select patindex('%[3-1]%', '3')
select patindex('%[3-1]%', '2')
select patindex('%[3-1]%', '1')这些都返回0.如果你将'-'放在末尾的话,它就只表示一个破折号了.如果你再问深一层的话,我也就说不清楚了。
CHECK( ISBN IN('0','1','2','3','4','5','6','7','8','9','/','-') )
);INSERT INTO tb1 VALUES('34');