标签:distinct HERE hid ems 空格 函数 字符 数字 扩展正则
1、通配符的使用:
SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL中,SQL的模式缺省是忽略大小写的。下面显示一些例子。
注意在你使用SQL模式时,你不能使用=或!=;而使用LIKE或NOT LIKE比较操作符。
(1)为了找出以“b”开头的名字:
mysql> SELECT * FROM pet WHERE name LIKE "b%";
(2)为了找出以“fy”结尾的名字:
mysql> SELECT * FROM pet WHERE name LIKE "%fy";
(3)为了找出包含一个“w”的名字:
mysql> SELECT * FROM pet WHERE name LIKE "%w%";
(4)为了找出包含正好2个字符开头第三个是a的名字,使用“_”模式字符:
mysql> SELECT * FROM pet WHERE name LIKE "__a";
由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。
2、正则表达式的使用:
(1)“.” 匹配任何单个的字符。
(2)一个字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的一个范围,使用一个“-”。“[a-z]” 匹配任何小写字母,而“[0-9]”匹配任何数字。
(3)“ * ”匹配零个或多个在它前面的东西。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。
正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。
如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)。
为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。
为了说明扩展正则表达式如何工作,上面所示的LIKE查询在下面使用REGEXP重写:
(1)为了找出以“b”开头的名字,使用“^”匹配名字的开始并且“[bB]”匹配小写或大写的“b”:
mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";
(2)为了找出以“fy”结尾的名字,使用“$”匹配名字的结尾:
mysql> SELECT * FROM pet WHERE name REGEXP "fy$";
(3)为了找出包含一个“w”的名字,使用“[wW]”匹配小写或大写的“w”:
mysql> SELECT * FROM pet WHERE name REGEXP "[wW]";
(4)为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:
mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";
(5)你也可以使用“{n}”“重复n次”操作符重写先前的查询:
mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$";
3、使用数据处理函数:
常用的文本处理函数:
left(str,len) 返回串左边的字符
select left("abcd",2);
right(str,len) 返回串右边的字符
select right("abcd",1);
length(str) 返回串的长度
select length("abcd");
lower(str) 将串转换为小写
select lower(‘ABCD‘);
upper(str) 将串转换为大写
select upper(‘abcd‘);
instr(str,substr)
这个函数返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始)
select instr("substr","bs"); 【返回 3】
locate(substr,str) locate(substr,str,pos)
第一个语法返回字符串 str中子字符串substr的第一个出现位置。第二个语法返回字符串 str中子字符串substr的第一个出现位置, 起始位置在pos。如若substr 不在str中,则返回值为0。
SELECT LOCATE(‘bar‘, ‘foobarbar‘); 【返回 4】
SELECT LOCATE(‘bar‘, ‘foobarbar‘,5); 【返回 7】
position(substr IN str)
返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0。
SELECT POSITION(‘bar‘, ‘foobarbar‘); 【返回 4】
ltrim(str) 去掉串左边的空格
select ltrim(" aac");
rtrim(str) 去掉串右边的空格
select rtrim(" aac");
聚集函数如下表:
distinct与聚集函数:
MySQL5.0.3以及之后的版本,聚集函数和distinct可以搭配使用,比如:
①对所有的行执行计算,指定all参数或不给参数(all是默认所有行为,不需要指定,如果不指定distinct,则假定为all);
②只包含不同的值,指定distinct参数;
③如果指定列名,则distinct只能用于count();distinct不能用于count(*),因此不允许使用count(distinct);distinct必须使用列名,不能用于计算或者表达式;
select avg(distinct prod_price) as avg_price from products where vend_id = 1003;
这条SQL语句中,使用avg()函数返回vend列中vend_id=1003的对应的price平均价格,因为使用了distinct参数,因此平均值只考虑不同的值(唯一值)
组合聚集函数:
select语句可以包含多个聚集函数,比如:
select count(*) as num_items, min(prod_price) as price_min, max(prod_price) as price_max, avg(prod_price) as price_avg from products;
这条SQL语句,使用了单条select语句执行4个聚集计算,返回四个值(products表中items的数目、price的最高、最低以及平均值)
PS:在指定别名以包含某个聚集函数的结果时,不应该使用表中实际的列名;这样便于使用SQL更加容易和理解,以及排除方便排除错误。
标签:distinct HERE hid ems 空格 函数 字符 数字 扩展正则
原文地址:https://www.cnblogs.com/tg666/p/9526303.html