sql创建表过程中如何达到列的取值约束为第一个字符为字母的要求

sql创建表过程中如何达到列的取值约束为第一个字符为字母的要求,第1张

你好,可以试下看是否符合你的要求:
create
table
t
(
--
第一位字母
c1
varchar(10)
check
(patindex('%[A-Z,a-z]%',c1)=1),
--
为数字列
c2
char(6)
check
(ISNUMERIC(c2)=1)
)
希望对你有所帮助,祝你好运~~

1> SELECT
2> PATINDEX('%come%go%', 'easy come, easy go, so easy!') A
3> go
A
-----------
6
(1 行受影响)
可以通过 PATINDEX(¡%[^a-zA-Z]%¡, 指定字符串) = 0 的方式,来创建 Check
约束,限制指定字段,只允许存储英文字母。
也就是
CREATE TABLE 表 (
字段 varchar(20) ,
CHECK PATINDEX(¡%[^a-zA-Z]%¡, 字段) = 0
);

可以这样写
alter table table1 add constraint chk_col check(
len(col1)= 8 and
left(col1,2) = '00' and
substring(col1,3,1) like '[1-9]' and
substring(col1,4,1) like '[1-9]' and
substring(col1,5,1) = '_' and
substring(col1,6,1) like '[A-Z]' and
substring(col1,7,1) like '[A-Z]' and
substring(col1,8,1) like '[A-Z]' );

SQL Server 2000 没有, 就拿个 SQL Server 2005 的来凑个数。
不大清楚 SQL Server 2000 里面,有没有 PATINDEX 函数了。
CREATE TABLE #temp(
test char(12)
CONSTRAINT chk_test
CHECK (
LEN(RTRIM(test)) = 11 AND
PATINDEX('%[^0-9]%', RTRIM(test)) = 0)
);
-- 失败 长度不符合,且是英文
INSERT INTO #temp VALUES ('a');
-- 失败 长度不符合
INSERT INTO #temp VALUES ('1');
-- 失败 长度不符合
INSERT INTO #temp VALUES ('123456789012');
-- 失败 长度符合 但是英文
INSERT INTO #temp VALUES ('1234567890a');
-- 成功
INSERT INTO #temp VALUES ('12345678901');


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12913989.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存