MySQL3通配符、正则、计算字段
1. 使⽤通配符进⾏过滤
通配符:⽤来匹配值的⼀部分的特殊字符。
搜索模式:由字⾯值、通配符或两者组合构成的搜索条件。
通配符本⾝实际是SQL的WHERE⼦句中有特殊含义的字符。
SQL⽀持⼏种通配符,为了在搜索⼦句中使⽤通配符,必须使⽤LIKE操作符。LIKE指⽰MySQL,后跟的搜索模式利⽤通配符匹配⽽不是直接相等匹配进⾏⽐较。
百分号%通配符:
%表⽰任何字符出现任意次数。
  SELECT prod_id, prod_name
  FROM products
  WHERE prod_name LIKE 'jet%';  //此例使⽤搜索模式'jet%'。将检索任意以jet起头的词。%告诉MySQL接受jet之后的任意字符。MySQL的搜索可以是区分⼤⼩写的。
匹配模式中的空格是有意义的。
下划线(_)操作符:
下划线的⽤途是匹配单个字符⽽不是多个字符。
  SELECT prod_id, prod_name
  FROM products
  WHERE prod_name LIKE '_ ton anvil';  //这⾥的_只且必须匹配⼀个字符,满⾜条件才被显⽰
2.  正则表达式
WHERE⼦句中使⽤正则表达式。匹配⽂本。REGEXP
基本字符匹配:
  SELECT prod_name
  FROM products
  WHERE prod_name REGEXP '1000'
  ORDER BY  prod_name;  //检索prod_name包含⽂本1000的所有⾏
相⽐于通配符匹配,正则匹配在WHERE⼦句中的命令⽤的是REGEX关键字。
正则表达式中的  .  :
  SELECT prod_name
  FROM products
  WHERE prod_name REGEXP '.000'
  ORDER BY prod_name;
.  是正则表达式语⾔中⼀个特殊的字符。它表⽰匹配任意⼀个字符,因此可以匹配1000、2000这样的。
进⾏OR匹配:使⽤ |
  SELECT prod_name
  FROM products
  WHERE prod_name REGEXP '1000|2000'
  ORDER BY prod_name;  //检索prod_name包含1000或2000的⾏记录
正则表达式中的“或”使⽤ |。多个或是:'1000|2000|3000'
匹配⼏个字符之⼀:是⽤中括号
  SELECT prod_name
  FROM products
  WHERE prod_name REGEXP '[123] Ton'
  ORDER BY prod_name;
[123]定义了⼀组字符,它的意思是匹配1或2或3。[]相当于另⼀种或命令。等同于 ’[1|2|3] Ton'。加[]防⽌误认为1|2|3 Ton,这时3 Ton是⼀个整体。
匹配范围:
也是使⽤中括号,如[123456789]可以简写为[1-9]。9个数字的或。
  SELECT prod_name
  FROM products
  WHERE prod_name REGEXP '[1-5] Ton'
  ORDER BY prod_name;
匹配特殊字符:
因为正则表达式中有些字符有特殊的功能,如( . 、|、[]、-)。为了匹配这些字符的原来形式,使⽤\\为前导,\\-表⽰查-,\\.表⽰查 . 。  SELECT vend_name
  FROM vendors
  WHERE vend_name REGEXP '\\.'
  ORDER BY vend_name;
\\相当于转义。为了匹配反斜杠(\)本⾝,需要使⽤\\\。
匹配字符类:
[:alnum:]  任意字母和数字
[:alpha:]  任意字符
[:blank:]  空格和制表
[:cntrl:]  ASCII控制字符
[:digit:]  任意数字
[:graph:]  与[:print:]相同,但不包含空格
[:lower:]  任意⼩写字母
[:print:]  任意可打印字符·
[:punct:]  即不在[:alnum:]⼜不在[:cntrl:]中的任意字符
[:space:]  包括空格在内的任意空⽩字符
[:upper:]  任意⼤写字母
[:xdigit:]  任意⼗六进制数字
匹配多个实例:以下是正则表达式中的元字符
元字符  说明
*  0或多个匹配
+  1或多个匹配(等于{1,})
  0个或1个匹配(等于{0,1})
{n}  指定数⽬的匹配
{n,}  不少于指定数⽬的匹配
{n,m}  匹配数⽬的范围(m不超过255)
  SELECT prod_name
  FROM products
  WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
  ORDER BY prod_name;
这⾥的\\匹配括号,然后?匹配其前⾯的字符s
  SELECT prod_name
  FROM products
  WHERE prod_name REGEXP '[[:digit:]]{4}'
  ORDER BY prod_name;
此处[:digit:]作为⼀个⼦集合。某个数字连续4次出现。
定位符:
前⾯讨论的匹配是字符串中任意位置的匹配,如果需要指明位置,则要使⽤定位符。元字符  说明
^  ⽂本的开始
正则匹配的含义$  ⽂本的结尾
[[:<:]]  词的开始
[[:>:]]  词的结尾
  SELECT prod_name
  FROM products
  WHERE prod_name REGEXP '^[0-9\\.]'
  ORDER BY prod_name;
匹配以任意数字或.为开头字符的字符串。
3. 计算字段
存储在数据库表中的数据⼀般不是应⽤程序所需要的格式。我们有时需要直接从数据库中检索出转换、计算或格式化过的数据;⽽不是检索出数据,然后再在客户机应⽤程序或报告程序中重新格式化。
计算字段是运⾏时在SELECT语句内创建的。
字段:基本上与列的意思相同,经常是互换使⽤,不过数据库列⼀般称为列,⽽术语字段通常⽤在计算字段的连接上。
拼接字段:
如vendors表包含供应商和位置信息。假如要⽣成⼀个供应商报表,需要在供应商的名字中按照name(location)这样的格式列出供应商的位置。
拼接:将值联结到⼀起构成单个值。
⽅法是把两个列拼接起来。在MySQL的SELECT语句中,可使⽤Concat()函数来拼接两个列。
  SELECT Concat( vend_name, ' (', vend_country, ') ')
  FROM vendors
  ORDER BY vend_name;
Concat()拼接串,即把多个串连接起来形成⼀个较长的串。
Concat()需要⼀个或多个指定的串,各个串之间⽤逗号分隔。
MySQL的RTrim()函数来删除数据右侧多余的空格来整理数据。
  SELECT Concat( RTrim(vend_name), ' (', RTrim(vend_country), ') ')
  FROM vendors
  ORDER BY vend_name;
RTrim()函数去掉值右边的所有空格。
LTrim()函数去掉左边空格,Trim()函数去掉串左右两边的空格。
使⽤别名:
别名是⼀个字段或值的替换名。别名⽤AS关键字。
  SELECT Concat( RTrim(vend_name), ' (', RTrim(vend_country), ') ') AS
  vend_title
  FROM vendors
  ORDER BY vend_name;
上⾯个将拼接值⽤⼀个别名替换。显⽰的列名称为这个别名。
执⾏算术计算:
MySQL中的SQL中⽀持⼀些算术操作符。
操作符  说明
+  加
-  减
*  乘
/  除
  SELECT prod_id,
      quantity,
      item_price,
      quantity*item_price AS expanded_price   FROM orderitems
  WHERE order_num = 20005;
将两项相乘并赋⼀个别名。
Now()函数返回当前⽇期和时间。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。