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

来源:互联网 发布:妇科看病流程 知乎 编辑:程序博客网 时间:2024/06/10 02:00

我在做数据库时碰到一个记录手机号的列,想试试用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中如此。
    我做这些测试之前认为类似'_'的通配符应该放到哪都表示任何单个字符,能起到占位的作用,做测试后发现放到字符串最后面起不到占位的作用就感觉别扭,希望各位高手开导和指教! 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新生儿喝水呛到怎么办 宝宝吃奶呛到了怎么办 羔羊高烧不退怎么办 小孩晚上咳嗽厉害怎么办 婴儿经常呛咳怎么办 新生儿3小时喂奶怎么办 宝宝不会吸奶怎么办 4岁宝宝打呼噜怎么办 宝宝感冒拒奶怎么办 新生儿吸奶无力怎么办 吃奶小牛肚子胀怎么办 新生儿吃奶后打嗝怎么办 新生儿吃多漾奶怎么办 婴儿总是睡不熟怎么办 新生儿不不吃奶怎么办 学生沉迷网络游戏班主怎么办 手机用不了卡怎么办 手机变竖屏怎么办 游戏不支持分屏怎么办 服装设计做到没思路怎么办 眼睛变单眼皮了怎么办 换手机号银行卡绑定怎么办 麦当劳mdp改版了怎么办 摆摊做小吃下雨怎么办 cad2014画图很卡怎么办 头皮有毛囊虫怎么办 头发上的毛囊炎怎么办 狗笼子里面拉屎怎么办 地图鱼起白点怎么办 初中学不好高中怎么办 初中孩子英语不好怎么办 初中孩子数学不好怎么办 万能声卡声音小怎么办 营业执照显示经营异常怎么办 暑假教育培训证怎么办 账套引入失败怎么办 报税报错了怎么办 税盘一年没抄税怎么办 初级会计证没领怎么办 房贷没有流水账怎么办 锦州银行倒闭了怎么办