关于通配符'_'不能起占位的作用

我在做数据库时碰到一个记录手机号的列,想试试用check约束。于是就用like做字符串比较,作为check约束的逻辑表达式。如下:
alter table table1
add mobilePhoneNum char(14)
go

alter table table1
add
constraint chk_mobilePhoneNum check (mobilePhoneNum like '130________' or mobilePhoneNum like '131________')
go

运行以上查询之后输入数据
insert into table1(mobilePhoneNum) values('13012345678')--插入成功--
insert into table1(mobilePhoneNum) values('1301234567')--插入成功--
insert into table1(mobilePhoneNum) values('13012345')--插入成功--
insert into table1(mobilePhoneNum) values('130123456781')--插入失败--

我就觉得疑惑。书上说通配符'_'表示任何单个字符。还有个例子:
LIKE '_en' 表示每个以字母en结尾,包含3个字母的名称

尝试了一下,书上是对的!难道通配符'_'放到字母前面能起到占位的作用,放到后面就只能起定义字符串最大长度的作用吗?这个似乎与通配符'_'的定义:表示任何单个字符的定义冲突!
后来又做了几个测试,发现真的如此。
LIKE '__AA' 表示以'AA'结尾,包含4个字符
LIKE 'AA__' 表示以'AA'开头,并且2<=字符串长度<=4
这些是在SQL Server 2000中测试的,总感觉不怎么符合常理,不知道是不是另有原因,或者本来就是这样理解,或者只有SQL Server 2000中如此。
    我做这些测试之前认为类似'_'的通配符应该放到哪都表示任何单个字符,能起到占位的作用,做测试后发现放到字符串最后面起不到占位的作用就感觉别扭,希望各位高手开导和指教! 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值