SQL必知必会之通配符及正则表达式

前两天又面了滴滴数分,结果临时有事,只能在商场的洗手间面试(又一次乌龙),感觉和滴滴咋这么没缘分呢。面试官问了我SQL的执行顺序,这个之前准备过,但是说的时候嘴瓢了,有点出入,再背一遍。

SQL必知必会有点太基础了。只记录一些易错点以及不常用模糊的知识点。今天做了下通配符和正则表达式的笔记。这两个都是实践出真知型,创个表练习下就明白了。

创建表:DROP TABLE IF EXISTS `Family`;
CREATE TABLE IF NOT EXISTS `Family` (
`name` VARCHAR(255) NOT NULL COMMENT '家人姓名',
`age` int(255) NOT NULL COMMENT '年龄'
);
INSERT INTO `Family` VALUES ('童大美','18'),
('童刨刨','2'),
('马飞','25'),
('大牙','6'),
('小美','13');
INSERT INTO `Family` VALUES ('童evovo','20');

1.通配符

SQL中% ,_,[],[^]通配符的使用

注:通配符必须与like 搭配使用

%的使用:代表0个、1个或多个字符。
_:代表一个字符
[]:表示在某一范围的字符
[^]:表示不在某一范围的字符
例:查看下表中姓童的记录
select  * from family Where name like '童%'

例:查看名字中含美的记录
select  * from family Where name like '%美%'

例:查看名字是两个字的记录。
select * from family where name like '__'

例:查看第二个字符为大的销售记录
select * from family where name like '_大%'

例:查看姓童或姓马的记录
按照书上的说法,用下面的代码即可:
select * from family where name like '[童,马]%'
但SQL中输出不了,gpt是这样讲的:

使用上述代码可以输出所需结果。此外,也可以用正则表达式来取数。
select * from family where name regexp '^[童|马]'

正则表达式匹配规则如下:

例:查看年龄为一位数的记录
select * from family where age regexp '^[0-9]$'

例:查看姓童且名字是三个字的记录
select * from family where name regexp '^童..$';

例:名字的末尾是中文的记录。
elect * from family where name regexp '[^ -~]$'

例:名字的末尾是英文的记录。
select * from family where name regexp '[ -~]$'

例:名字中不包含中文字符的,
我们插入几个其他名词insert into family values ('Fiona','24'),('007','7');
select * from family where name regexp '^([a-z]|[A-Z]|[0-9])+$';

例:名字首位是中文,第二位是英文的记录
select * from family where name regexp '^[^ -~]([a-z]|[A-Z])';

全部评论

相关推荐

2 14 评论
分享
牛客网
牛客企业服务