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])';